diff options
Diffstat (limited to 'front/odiparpack/internals/webpack/webpack.dev.babel.js')
| -rw-r--r-- | front/odiparpack/internals/webpack/webpack.dev.babel.js | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/front/odiparpack/internals/webpack/webpack.dev.babel.js b/front/odiparpack/internals/webpack/webpack.dev.babel.js new file mode 100644 index 0000000..dda13b8 --- /dev/null +++ b/front/odiparpack/internals/webpack/webpack.dev.babel.js @@ -0,0 +1,144 @@ +/** + * DEVELOPMENT WEBPACK CONFIGURATION + */ + +const path = require('path'); +const fs = require('fs'); +const glob = require('glob'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin'); +const CircularDependencyPlugin = require('circular-dependency-plugin'); +const logger = require('../../server/logger'); +const pkg = require(path.resolve(process.cwd(), 'package.json')); // eslint-disable-line +const { dllPlugin } = pkg; + +const plugins = [ + new webpack.HotModuleReplacementPlugin(), // Tell webpack we want hot reloading + new HtmlWebpackPlugin({ + inject: true, // Inject all files that are generated by webpack, e.g. bundle.js + template: 'app/index.html', + }), + new CircularDependencyPlugin({ + exclude: /a\.js|node_modules/, // exclude node_modules + failOnError: false, // show a warning when there is a circular dependency + }), +]; + +if (dllPlugin) { + glob.sync(`${dllPlugin.path}/*.dll.js`).forEach(dllPath => { + plugins.push( + new AddAssetHtmlPlugin({ + filepath: dllPath, + includeSourcemap: false, + }), + ); + }); +} + +module.exports = require('./webpack.base.babel')({ + mode: 'development', + + // Add hot reloading in development + entry: [ + 'eventsource-polyfill', // Necessary for hot reloading with IE + 'webpack-hot-middleware/client?reload=true', + path.join(process.cwd(), 'app/app.js'), // Start with js/app.js + ], + + // Don't use hashes in dev mode for better performance + output: { + filename: '[name].js', + chunkFilename: '[name].chunk.js', + }, + + optimization: { + splitChunks: { + chunks: 'all', + }, + }, + + // Add development plugins + plugins: dependencyHandlers().concat(plugins), // eslint-disable-line no-use-before-define + + // Emit a source map for easier debugging + // See https://webpack.js.org/configuration/devtool/#devtool + devtool: 'eval-source-map', + + performance: { + hints: false, + }, +}); + +/** + * Select which plugins to use to optimize the bundle's handling of + * third party dependencies. + * + * If there is a dllPlugin key on the project's package.json, the + * Webpack DLL Plugin will be used. + * + */ +function dependencyHandlers() { + // Don't do anything during the DLL Build step + if (process.env.BUILDING_DLL) { + return []; + } + + // Don't do anything if package.json does not have a dllPlugin property + // Code splitting now included by default in Webpack 4 + if (!dllPlugin) { + return []; + } + + const dllPath = path.resolve( + process.cwd(), + dllPlugin.path || 'node_modules/react-boilerplate-dlls', + ); + + /** + * If DLLs aren't explicitly defined, we assume all production dependencies listed in package.json + * Reminder: You need to exclude any server side dependencies by listing them in dllConfig.exclude + */ + if (!dllPlugin.dlls) { + const manifestPath = path.resolve(dllPath, 'reactBoilerplateDeps.json'); + + if (!fs.existsSync(manifestPath)) { + logger.error( + 'The DLL manifest is missing. Please run `npm run build:dll`', + ); + process.exit(0); + } + + return [ + new webpack.DllReferencePlugin({ + context: process.cwd(), + manifest: require(manifestPath), // eslint-disable-line + }), + ]; + } + + // If DLLs are explicitly defined, we automatically create a DLLReferencePlugin for each of them. + const dllManifests = Object.keys(dllPlugin.dlls) + .map(name => path.join(dllPath, `/${name}.json`)); + + return dllManifests.map(manifestPath => { + if (!fs.existsSync(path)) { + if (!fs.existsSync(manifestPath)) { + logger.error( + `The following Webpack DLL manifest is missing: ${path.basename( + manifestPath, + )}`, + ); + logger.error(`Expected to find it in ${dllPath}`); + logger.error('Please run: npm run build:dll'); + + process.exit(0); + } + } + + return new webpack.DllReferencePlugin({ + context: process.cwd(), + manifest: require(manifestPath), // eslint-disable-line + }); + }); +} |
