use*_*023 15 javascript webpack
在Webpack中,我有以下插件:
plugins: [
new ExtractTextPlugin('styles.css'),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
drop_console: true,
}),
]
Run Code Online (Sandbox Code Playgroud)
我想UglifyJsPlugin 仅针对特定目标应用,所以我尝试使用我想要的条件:
plugins: [
new ExtractTextPlugin('styles.css'),
(TARGET === 'build') && new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
drop_console: true,
}),
]
Run Code Online (Sandbox Code Playgroud)
但是,此操作失败,显示以下错误消息:
E:\myProject\node_modules\tapable\lib\Tapable.js:164
arguments[i].apply(this);
^
TypeError: arguments[i].apply is not a function
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码类似于false在plugins数组的末尾(发出相同的错误):
plugins: [
new ExtractTextPlugin('styles.css'),
false
]
Run Code Online (Sandbox Code Playgroud)
所以,问题是:有没有办法在Webpack上有条件插件?(除了使用变量?)
UnL*_*oCo 37
您可以使用这种使用扩展运算符的语法
plugins: [
new MiniCssExtractPlugin({
filename: '[name].css'
}),
...(prod ? [] : [new BundleAnalyzerPlugin()])
],
Run Code Online (Sandbox Code Playgroud)
Jef*_*ett 16
鉴于我的条件,我推入了插件阵列 webpack.config.js
var webpack = require('webpack');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: {
...
},
output: {
...
},
module: {
rules: [
...
]
},
plugins: [
new ExtractTextPlugin('styles.css'),
]
};
if (TARGET === 'build') {
module.exports.plugins.push(
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
drop_console: true,
}),
);
}
Run Code Online (Sandbox Code Playgroud)
Bob*_*nge 11
没有变量,它将如下所示:
plugins: [
new ExtractTextPlugin('styles.css'),
(TARGET === 'build') && new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
drop_console: true,
}),
].filter(function(plugin) { return plugin !== false; })
Run Code Online (Sandbox Code Playgroud)
可以使用noop-webpack-plugin(noop表示不进行任何操作):
const isProd = process.env.NODE_ENV === 'production';
const noop = require('noop-webpack-plugin');
// ...
plugins: [
isProd ? new Plugin() : noop(),
]
Run Code Online (Sandbox Code Playgroud)
或者更好/推荐的解决方案,无需附加模块:
const isProd = process.env.NODE_ENV === 'production';
// ...
plugins: [
isProd ? new Plugin() : false,
].filter(Boolean)
// filter(Boolean) removes items from plugins array which evaluate to
// false (so you can use e.g. 0 instead of false: `new Plugin() : 0`)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4939 次 |
| 最近记录: |