2018-04-06 14:51:52 +01:00
|
|
|
const path = require('path');
|
2019-01-17 02:49:03 +03:00
|
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
2019-11-14 21:13:44 +01:00
|
|
|
const { writeFileSync } = require('fs');
|
2018-04-06 14:51:52 +01:00
|
|
|
|
2018-09-12 11:41:27 +03:00
|
|
|
module.exports = (env = {}) => {
|
|
|
|
const __DEV__ = env.production !== true;
|
2019-11-14 21:13:44 +01:00
|
|
|
const staticPath = path.join(__dirname, './static/js');
|
|
|
|
const configPath = path.join(__dirname, './config');
|
2018-09-12 11:41:27 +03:00
|
|
|
return {
|
|
|
|
mode: __DEV__ ? 'development' : 'production',
|
2018-11-11 16:49:20 +03:00
|
|
|
entry: {
|
|
|
|
'frame-runner': './src/client/frame-runner.js',
|
2018-11-26 02:17:38 +03:00
|
|
|
'sass-compile': './src/client/workers/sass-compile.js',
|
|
|
|
'test-evaluator': './src/client/workers/test-evaluator.js'
|
2018-11-11 16:49:20 +03:00
|
|
|
},
|
2018-09-12 11:41:27 +03:00
|
|
|
devtool: __DEV__ ? 'inline-source-map' : 'source-map',
|
|
|
|
output: {
|
2019-01-12 03:41:45 +03:00
|
|
|
publicPath: '/js/',
|
2019-11-14 21:13:44 +01:00
|
|
|
filename: chunkData => {
|
|
|
|
// construct and output the filename here, so the client can use the
|
|
|
|
// json to find the file.
|
|
|
|
const filename = `${chunkData.chunk.name}.${chunkData.chunk.contentHash.javascript}`;
|
|
|
|
writeFileSync(
|
|
|
|
path.join(configPath, `${chunkData.chunk.name}.json`),
|
|
|
|
`{"filename": "${filename}"}`
|
|
|
|
);
|
|
|
|
return filename + '.js';
|
|
|
|
},
|
|
|
|
chunkFilename: '[name].[contenthash].js',
|
|
|
|
path: staticPath
|
2018-09-12 11:41:27 +03:00
|
|
|
},
|
|
|
|
stats: {
|
|
|
|
// Display bailout reasons
|
|
|
|
optimizationBailout: true
|
|
|
|
},
|
|
|
|
module: {
|
2018-09-30 11:37:19 +01:00
|
|
|
rules: [
|
|
|
|
{
|
|
|
|
test: /\.jsx?$/,
|
|
|
|
include: [path.join(__dirname, 'src/client/')],
|
|
|
|
use: {
|
|
|
|
loader: 'babel-loader',
|
|
|
|
options: {
|
|
|
|
babelrc: false,
|
|
|
|
presets: [
|
|
|
|
[
|
|
|
|
'@babel/preset-env',
|
|
|
|
{ modules: false, targets: '> 0.25%, not dead' }
|
|
|
|
]
|
|
|
|
],
|
2019-01-12 03:41:45 +03:00
|
|
|
plugins: [
|
|
|
|
'@babel/plugin-transform-runtime',
|
|
|
|
'@babel/plugin-syntax-dynamic-import'
|
|
|
|
]
|
2018-09-30 11:37:19 +01:00
|
|
|
}
|
2018-09-12 11:41:27 +03:00
|
|
|
}
|
2018-04-06 14:51:52 +01:00
|
|
|
}
|
2018-09-30 11:37:19 +01:00
|
|
|
]
|
2018-12-28 10:49:53 +03:00
|
|
|
},
|
2019-01-17 02:49:03 +03:00
|
|
|
plugins: [
|
|
|
|
new CopyWebpackPlugin([
|
|
|
|
{ from: 'node_modules/sass.js/dist/sass.sync.js' }
|
|
|
|
])
|
|
|
|
]
|
2018-09-12 11:41:27 +03:00
|
|
|
};
|
2018-04-06 14:51:52 +01:00
|
|
|
};
|