beidou-webpack
Version:
beidou webpack middleware
104 lines (95 loc) • 2.46 kB
JavaScript
;
// Webpack config for node
const webpack = require('webpack');
const MinifyPlugin = require('babel-minify-webpack-plugin');
const { common } = require('./webpack.common');
const {
imageLoaderConfig,
fileLoaderConfig,
getStyleCongfigs,
MiniCssExtractPlugin,
} = require('./utils');
module.exports = (app, entry, dev) => {
const factory = app.webpackFactory;
const viewConfig = app.config.view;
const { custom } = app.config.webpack;
common(app, entry, dev);
factory.get('output').libraryTarget = 'commonjs';
factory.set('target', 'node');
factory.set('externals', /^react(-dom)?$/);
factory.set('node', {
__filename: true,
__dirname: true,
});
[
{
test: /\.(js|jsx|mjs)$/,
exclude: /node_modules/,
use: {
loader: require.resolve('babel-loader'),
options: {
babelrc: false,
presets: [require.resolve('babel-preset-beidou-server')],
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
highlightCode: true,
},
},
},
...getStyleCongfigs(dev, {
cssExtract: custom.cssExtract,
}),
imageLoaderConfig,
fileLoaderConfig,
].forEach((v) => {
factory.defineRule(v).addRule(v);
});
if (!dev && viewConfig.useHashAsset) {
factory.definePlugin(
MiniCssExtractPlugin,
{
filename: '[name]_[hash:8].css',
},
'MiniCssExtractPlugin'
);
} else {
factory.definePlugin(
MiniCssExtractPlugin,
{
filename: '[name].css',
},
'MiniCssExtractPlugin'
);
}
if (custom.cssExtract) {
factory.addPlugin('MiniCssExtractPlugin');
}
factory.definePlugin(
webpack.DefinePlugin,
{
'process.env.NODE_ENV': JSON.stringify('production'),
__CLIENT__: false,
__DEV__: false,
__SERVER__: true,
},
'DefinePlugin'
);
if (!dev) {
factory.addPlugin('DefinePlugin');
factory.addPlugin(MinifyPlugin, null, 'MinifyPlugin');
} else {
factory.setPlugin(
webpack.DefinePlugin,
{
'process.env.NODE_ENV': JSON.stringify('development'),
__CLIENT__: false,
__DEV__: true,
__SERVER__: true,
},
'DefinePlugin'
);
}
return factory.getConfig();
};