dev-toolkit
Version:
Universal Development Toolkit for React Veterans
85 lines (74 loc) • 3.58 kB
JavaScript
;
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;