123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /* global __dirname */
-
- const process = require('process');
- const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
- const analyzeBundle = process.argv.indexOf('--analyze-bundle') !== -1;
- const minimize
- = process.argv.indexOf('-p') !== -1
- || process.argv.indexOf('--optimize-minimize') !== -1;
-
- /**
- * Build a Performance configuration object for the given size.
- * See: https://webpack.js.org/configuration/performance/
- */
- function getPerformanceHints(size) {
- return {
- hints: minimize ? 'error' : false,
- maxAssetSize: size,
- maxEntrypointSize: size
- };
- }
-
- // The base Webpack configuration to bundle the JavaScript artifacts of
- // jitsi-meet such as app.bundle.js and external_api.js.
- const config = {
- devtool: 'source-map',
- mode: minimize ? 'production' : 'development',
- module: {
- rules: [ {
- // Transpile ES2015 (aka ES6) to ES5. Accept the JSX syntax by React
- // as well.
-
- exclude: [
- new RegExp(`${__dirname}/node_modules/(?!js-utils)`)
- ],
- loader: 'babel-loader',
- options: {
- // XXX The require.resolve bellow solves failures to locate the
- // presets when lib-jitsi-meet, for example, is npm linked in
- // jitsi-meet.
- plugins: [
- require.resolve('@babel/plugin-transform-flow-strip-types'),
- require.resolve('@babel/plugin-proposal-class-properties'),
- require.resolve('@babel/plugin-proposal-export-default-from'),
- require.resolve('@babel/plugin-proposal-export-namespace-from'),
- require.resolve('@babel/plugin-proposal-nullish-coalescing-operator'),
- require.resolve('@babel/plugin-proposal-optional-chaining')
- ],
- presets: [
- [
- require.resolve('@babel/preset-env'),
-
- // Tell babel to avoid compiling imports into CommonJS
- // so that webpack may do tree shaking.
- {
- modules: false,
-
- // Specify our target browsers so no transpiling is
- // done unnecessarily. For browsers not specified
- // here, the ES2015+ profile will be used.
- targets: {
- chrome: 58,
- electron: 2,
- firefox: 54,
- safari: 11
- }
-
- }
- ],
- require.resolve('@babel/preset-flow'),
- require.resolve('@babel/preset-react')
- ]
- },
- test: /\.jsx?$/
- }, {
- // Expose jquery as the globals $ and jQuery because it is expected
- // to be available in such a form by multiple jitsi-meet
- // dependencies including lib-jitsi-meet.
-
- loader: 'expose-loader?$!expose-loader?jQuery',
- test: /\/node_modules\/jquery\/.*\.js$/
- } ]
- },
- node: {
- // Allow the use of the real filename of the module being executed. By
- // default Webpack does not leak path-related information and provides a
- // value that is a mock (/index.js).
- __filename: true
- },
- optimization: {
- concatenateModules: minimize,
- minimize
- },
- output: {
- filename: `[name]${minimize ? '.min' : ''}.js`,
- path: `${__dirname}/libs`,
- publicPath: 'load-test/libs/',
- sourceMapFilename: `[name].${minimize ? 'min' : 'js'}.map`
- },
- plugins: [
- analyzeBundle
- && new BundleAnalyzerPlugin({
- analyzerMode: 'disabled',
- generateStatsFile: true
- })
- ].filter(Boolean),
- resolve: {
- alias: {
- jquery: `jquery/dist/jquery${minimize ? '.min' : ''}.js`
- },
- aliasFields: [
- 'browser'
- ],
- extensions: [
- '.web.js',
-
- // Webpack defaults:
- '.js',
- '.json'
- ]
- }
- };
-
- module.exports = [
- Object.assign({}, config, {
- entry: {
- 'load-test-participant': './load-test-participant.js'
- },
- performance: getPerformanceHints(3 * 1024 * 1024)
- })
- ];
|