如何改善webpack构建时间。目前我正在打包150个文件。大约需要15秒(这是太多的时间)。并且大部分时间都在“优化大块资产”的过程中被吃掉了。大约需要10秒钟。任何方式将此降低到最多3-4秒。
或者我如何在webpack中禁用优化步骤。我没有明确使用任何配置来缩小/丑化。
这是我目前使用的配置::
module.exports = {
context: __dirname,
entry: './js/main.js',
target: 'web',
module: {
loaders: [
{ test: /text!/, loader: 'raw-loader'},
{ test: /backbone/, loader: 'imports-loader?this=>window' },
{ test: /marionette/, loader: 'imports-loader?this=>window' },
{ test: /sprintf/, loader: 'script-loader' },
{ test: /\.css$/, loader: "style!css" },
{ test: /\.scss$/, loader: 'style!css!sass' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' }
]
},
resolveLoader: {
root: path.join(__dirname, 'node_modules'),
alias: {
'text': 'raw'
}
},
output: {
filename: 'bundle.js',
library: 'require',
libraryTarget: 'this'
},
resolve: {
alias: alias,
root: path.join(__dirname, 'node_modules'),
extensions: ['', '.js', '.jsx']
},
externals: {
jquery: 'jQuery'
},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
'root.jQuery': 'jquery',
'Backbone': 'backbone',
'_': 'underscore',
'Marionette': 'marionette',
'sprintf': 'sprintf'
})
],
devtool: 'source-map'
};
感谢Advance的帮助。
答案 0 :(得分:7)
您可以对构建进行一些优化。
首先,实际上,您正在通过jsx加载器解析node_modules
中的所有文件。你想要排除它们。
loaders: [{
test: /\.js$/,
loader: 'jsx-loader?harmony',
exclude: /node_modules/, // <---
}]
其次,所有供应商文件(在开发期间不会发生变化)都会在每次更改文件时进行编译。这不是很有效,您应该使用CommonsChunkPlugin将供应商文件与应用程序代码分开。
实质上,您必须添加:
config.entry = {
app: './js/main.js',
vendor: ['react', 'moment', 'react-router', /* etc. all the "big" libs */],
};
config.output = {
filename: '[name].js', /* will create app.js & vendor.js */
};
config.plugins = [
/* ... */
new webpack.optimize.CommonsChunkPlugin(
/* chunkName= */"vendor",
/* filename= */"vendor.bundle.js"
),
];
答案 1 :(得分:1)
Webpack提供了许多devtools
:https://webpack.github.io/docs/configuration.html#devtool
您正在使用devtools: 'source-map'
。
我更改为devtools: 'cheap-eval-source-map'
,块资产优化从4500毫秒变为306毫秒,devtools: 'eval'
变为1毫秒。
请注意,两者都不是Production Suported,因为最终的.js文件太大,在我的情况下是13MB。