UNPKG

dev-toolkit

Version:

Universal Development Toolkit for React Veterans

85 lines (74 loc) 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _path = _interopRequireDefault(require("path")); var _assetsWebpackPlugin = _interopRequireDefault(require("assets-webpack-plugin")); var _webpack = require("webpack"); var _babelRunner = require("babel-runner"); var _projectSettings = require("./projectSettings"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _default = function _default() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { creatingBuild: true }, getWebpackAssets = _ref.getWebpackAssets, creatingBuild = _ref.creatingBuild, userSettings = _ref.userSettings; var namingConvention = creatingBuild ? '[name].[chunkhash]' : '[name]'; var customizationOptions = { projectRoot: _projectSettings.projectRoot, creatingBuild: creatingBuild, namingConvention: namingConvention, assetsPath: _projectSettings.assetsPath, publicPath: _projectSettings.publicPath, babelrc: _babelRunner.babelrc }; // Allow completely extending webpack with `webpack.customize` return userSettings.webpack.customize({ entry: { app: [_projectSettings.entryPoint] }, mode: creatingBuild ? 'production' : 'development', output: { path: _projectSettings.assetsPath, filename: "".concat(namingConvention, ".js"), chunkFilename: "".concat(namingConvention, ".js"), publicPath: _projectSettings.publicPath }, module: { rules: [{ test: /\.jsx?$/, loaders: ["babel-loader?".concat(JSON.stringify(_babelRunner.babelrc))], exclude: /(node_modules)|\.route.jsx?$|\.dynamic.jsx?$/ }, { test: /\.route.jsx?$|\.dynamic.jsx?$/, loaders: [// `bundle`-loader automatically uses module directly when code is run on the server 'bundle-loader?lazy&name=[name]', "babel-loader?".concat(JSON.stringify(_babelRunner.babelrc))], exclude: /(node_modules)/ }].concat( // Add any user settings from `webpack.loaders` userSettings.webpack.rules(customizationOptions)) }, plugins: [new _webpack.DefinePlugin({ devToolkitSettings: JSON.stringify(userSettings.devToolkit), // React & Redux rely on this to be set explicitly 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) })].concat(getWebpackAssets ? [new _assetsWebpackPlugin.default({ path: _projectSettings.assetsManifestFolder, filename: _projectSettings.assetsManifestName, processOutput: getWebpackAssets })] : []).concat(creatingBuild ? [] : [new _webpack.HotModuleReplacementPlugin(), new _webpack.NoEmitOnErrorsPlugin()]).concat( // Add any user settings from `webpack.plugins` userSettings.webpack.plugins(customizationOptions)), resolve: { modules: [// Resolve dev-toolkit related modules like 'webpack-hot-middleware/client' _path.default.resolve(_projectSettings.devToolkitRoot, 'node_modules'), // Resolve all other modules from client app _path.default.resolve(_projectSettings.projectRoot, 'node_modules'), 'node_modules'] }, resolveLoader: { modules: [// Resolve dev-toolkit related webpack loaders like 'babel-loader' _path.default.resolve(_projectSettings.devToolkitRoot, 'node_modules'), // Resolve webpack loaders related to project _path.default.resolve(_projectSettings.projectRoot, 'node_modules'), 'node_modules'] } }, customizationOptions); }; exports.default = _default;