You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.4 KiB
JavaScript
175 lines
4.4 KiB
JavaScript
const pkgJson = require('./package.json');
|
|
const path = require('path');
|
|
const webpack = require('webpack');
|
|
|
|
const uglifyJsOptions = {
|
|
screwIE8: true,
|
|
stats: true,
|
|
compress: {
|
|
warnings: false
|
|
},
|
|
mangle: {
|
|
toplevel: true,
|
|
eval: true
|
|
}
|
|
};
|
|
|
|
const commonConfig = {
|
|
entry: './src/hls.js',
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.js$/,
|
|
exclude: [
|
|
path.resolve(__dirname, 'node_modules')
|
|
],
|
|
use: {
|
|
loader: 'babel-loader'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
};
|
|
|
|
// Allow to customise light dists through env-vars.
|
|
const env = process.env;
|
|
const addSubtitleSupport = (typeof env.SUBTITLE !== 'undefined' && env.SUBTITLE);
|
|
const addAltAudioSupport = (typeof env.ALT_AUDIO !== 'undefined' && env.ALT_AUDIO);
|
|
|
|
function getPluginsForConfig(type, minify = false) {
|
|
// common plugins.
|
|
const plugins = [
|
|
new webpack.optimize.OccurrenceOrderPlugin(),
|
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
new webpack.DefinePlugin(getConstantsForConfig(type))
|
|
];
|
|
|
|
if (minify) {
|
|
// minification plugins.
|
|
return plugins.concat([
|
|
new webpack.optimize.UglifyJsPlugin(uglifyJsOptions),
|
|
new webpack.LoaderOptionsPlugin({
|
|
minimize: true,
|
|
debug: false
|
|
})
|
|
]);
|
|
}
|
|
|
|
return plugins;
|
|
}
|
|
|
|
function getConstantsForConfig(type) {
|
|
// By default the "main" dists (hls.js & hls.min.js) are full-featured.
|
|
return {
|
|
__VERSION__: JSON.stringify(pkgJson.version),
|
|
__SUBTITLE__: JSON.stringify(type === 'main' ? true: addSubtitleSupport),
|
|
__ALT_AUDIO__: JSON.stringify(type === 'main' ? true : addAltAudioSupport)
|
|
};
|
|
}
|
|
|
|
function getAliasesForLightDist() {
|
|
let aliases = {};
|
|
|
|
if (!addSubtitleSupport) {
|
|
aliases = Object.assign({}, aliases, {
|
|
'./utils/cues': './empty.js',
|
|
'./controller/timeline-controller': './empty.js',
|
|
'./controller/subtitle-track-controller': './empty.js',
|
|
'./controller/subtitle-stream-controller': './empty.js'
|
|
});
|
|
}
|
|
|
|
if (!addAltAudioSupport) {
|
|
aliases = Object.assign({}, aliases, {
|
|
'./controller/audio-track-controller': './empty.js',
|
|
'./controller/audio-stream-controller': './empty.js'
|
|
});
|
|
}
|
|
|
|
return aliases;
|
|
}
|
|
|
|
const multiConfig = [
|
|
{
|
|
name: 'debug',
|
|
output: {
|
|
filename: 'hls.js',
|
|
chunkFilename: '[name].js',
|
|
sourceMapFilename: 'hls.js.map',
|
|
path: path.resolve(__dirname, 'dist'),
|
|
publicPath: '/dist/',
|
|
library: 'Hls',
|
|
libraryTarget: 'umd',
|
|
libraryExport: 'default'
|
|
},
|
|
plugins: getPluginsForConfig('main'),
|
|
devtool: 'source-map',
|
|
},
|
|
{
|
|
name: 'dist',
|
|
output: {
|
|
filename: 'hls.min.js',
|
|
chunkFilename: '[name].js',
|
|
path: path.resolve(__dirname, 'dist'),
|
|
publicPath: '/dist/',
|
|
library: 'Hls',
|
|
libraryTarget: 'umd',
|
|
libraryExport: 'default'
|
|
},
|
|
plugins: getPluginsForConfig('main', true)
|
|
},
|
|
{
|
|
name: 'light',
|
|
output: {
|
|
filename: 'hls.light.js',
|
|
chunkFilename: '[name].js',
|
|
sourceMapFilename: 'hls.light.js.map',
|
|
path: path.resolve(__dirname, 'dist'),
|
|
publicPath: '/dist/',
|
|
library: 'Hls',
|
|
libraryTarget: 'umd',
|
|
libraryExport: 'default'
|
|
},
|
|
resolve: {
|
|
alias: getAliasesForLightDist()
|
|
},
|
|
plugins: getPluginsForConfig('light'),
|
|
devtool: 'source-map'
|
|
},
|
|
{
|
|
name: 'light-dist',
|
|
output: {
|
|
filename: 'hls.light.min.js',
|
|
chunkFilename: '[name].js',
|
|
path: path.resolve(__dirname, 'dist'),
|
|
publicPath: '/dist/',
|
|
library: 'Hls',
|
|
libraryTarget: 'umd',
|
|
libraryExport: 'default'
|
|
},
|
|
resolve: {
|
|
alias: getAliasesForLightDist()
|
|
},
|
|
plugins: getPluginsForConfig('light', true)
|
|
}
|
|
].map(fragment => Object.assign({}, commonConfig, fragment));
|
|
|
|
// webpack matches the --env arguments to a string; for example, --env.debug.min translates to { debug: true, min: true }
|
|
module.exports = (envArgs) => {
|
|
if (!envArgs) {
|
|
// If no arguments are specified, return every configuration
|
|
return multiConfig;
|
|
}
|
|
|
|
// Find the first enabled config within the arguments array
|
|
const enabledConfigName = Object.keys(envArgs).find(envName => envArgs[envName]);
|
|
let enabledConfig = multiConfig.find(config => config.name === enabledConfigName);
|
|
|
|
if (!enabledConfig) {
|
|
console.error(`Couldn't find a valid config with the name "${enabledConfigName}". Known configs are: ${multiConfig.map(config => config.name).join(', ')}`);
|
|
return;
|
|
}
|
|
|
|
return enabledConfig;
|
|
};
|