【发布时间】:2017-11-15 01:32:28
【问题描述】:
我的 react 应用程序中的 webpack 构建时间存在问题。一切都很好,但需要很长时间。
即使我只更改 CSS 重建的 JavaScript 文件?
CSS 编译的时间也比我想象的要长(如果我错了,请纠正我)?
我正在运行一个带有 16gb 内存的 Core i7,构建大约需要一分钟,这在开发过程中变得非常烦人,因为它是一行更改,你必须等待足够近的一分钟才能看到你的更改浏览器?
这是错误的方法吗?
const CleanObsoleteChunks = require('webpack-clean-obsolete-chunks');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const DashboardPlugin = require('webpack-dashboard/plugin');
const path = require('path');
const webpack = require('webpack');
const BUILD_DIR = path.resolve(__dirname, '../dist');
const APP_DIR = path.resolve(__dirname, 'src/');
const config = {
devtool: 'source-map',
entry: {
"ehcp-coordinator": [
APP_DIR + '/index.js'
]
},
output: {
path: `${BUILD_DIR}/js/`,
filename: '[name].js',
chunkFilename: '[name]-chunk.js',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['es2015', 'es2017', 'react', 'stage-0'],
plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties', 'syntax-dynamic-import',
["import", {"libraryName": "antd", "style": false}]]
}
}
}, {
test: /\.less$/,
use: ExtractTextPlugin.extract({
use: [{
loader: "css-loader"
}, {
loader: "less-loader"
}]
})
}
]
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': "'development'"
}),
new webpack.optimize.UglifyJsPlugin({
'sourceMap': 'source-map'
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: '[name].js',
minChunks(module, count) {
var context = module.context;
return context && context.indexOf('node_modules') >= 0;
}
}),
new ExtractTextPlugin("../css/[name].css")
],
resolve: {
modules: [
path.resolve('./'),
path.resolve('./node_modules'),
],
extensions: ['.js', '.json']
}
};
module.exports = config;
【问题讨论】:
-
我建议只在生产环境中使用
UglifyJsPlugin和ExtractTextPlugin- 它们在编译时间方面相当繁重。另外,我认为您可以完全删除配置中的resolve部分 - 它似乎与默认值没有明显不同。 -
大多数人倾向于拥有单独的开发和生产配置文件,或者(我的偏好)检查配置脚本中的
process.env.NODE_ENV以有条件地启用/禁用某些部分。 -
抱歉忘了说这是 dev webpack 配置而不是 prod build 配置。还有为什么说只有 JS 发生了变化,为什么还要构建 CSS?
-
您可以继续使用
less-loader和css-loader,只需将它们输入style-loader,而不是在开发中。这会在运行时将 CSS 注入页面头部,而不是将其放在单独的文件中。 -
另外,如果你还没有,使用
webpack-dev-server而不是仅仅在监视模式下运行 Webpack - 使用开发服务器编译内存中的文件而不是将它们保存到磁盘,这进一步减少了开发中的编译时间。这意味着当您想要输出文件时必须手动运行构建,但无论如何您都需要这样做才能切换到生产配置。
标签: javascript reactjs webpack babeljs