我的问题是这个
https://github.com/petehunt/webpack-howto/issues/46
或者 - 如何让webpack将脚本标记包含在基于我的环境的HTML中?如果我在生产中运行,我只想要包含某个脚本标记。
这是我当前的webpack文件的样子(我正在使用webpack 2)。
const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const VENDOR_LIBS = [
'axios', 'react', 'react-dom', 'react-router', 'react-apollo', 'prop-types'
];
module.exports = {
entry: {
bundle: './client/src/index.js',
vendor: VENDOR_LIBS
},
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: '[name].[chunkhash].js'
},
module: {
rules: [
{
use: 'babel-loader',
test: /\.js$/,
exclude: /node_modules/
},
{
test: /\.scss$/,
use: [{
loader: "style-loader"
}, {
loader: "css-loader"
}, {
loader: "sass-loader"
}]
},
{
test: /\.(jpe?g|png|gif|svg|)$/,
use: [
{
loader: 'url-loader',
options: {limit: 40000}
},
'image-webpack-loader'
]
}
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
names: ['vendor', 'manifest']
}),
new HtmlWebpackPlugin({
template: './client/src/index.html'
})
]
};
答案 0 :(得分:3)
Webpack始终会查找webpack.config.js
文件,因此您必须执行以下配置才能使其动态化:
<强>的package.json 强>
"dev": "webpack-dev-server --env=dev",
"prod": webpack -p --env=prod
<强> webpack.config.js 强>
module.exports = function(env) {
return require(`./webpack.${env}.js`)
}
设置--env=[env]
标志是关键。
然后我有两个不同的webpack文件。一个叫wepback.dev.js
,一个叫webpack.prod.js
。根据{{1}}命令,它将运行。然后我创建了两个不同的index.html文件 - package.json
和index.prod.html
。在这些内容中,我包含了每个环境所需的任何脚本。
我正在使用webpack 2.在每个文件中,index.dev.html
区域看起来如此:
<强> webpack.dev.js 强>
plugins
正如您在此示例中所看到的,我的plugins: [
new webpack.optimize.CommonsChunkPlugin({
names: ['vendor', 'manifest']
}),
new HtmlWebpackPlugin({
template: './client/src/index.dev.html'
})
]
会将所有内容输出到我的webpack.dev.js
文件中。除了使用index.dev.html
之外,prod版本将镜像相同。要查看完整的prod
文件,请查看原始帖子。
答案 1 :(得分:0)
由于Webpack配置文件返回JS对象,您可以在返回/导出配置对象之前添加条件语句(基于您的环境或webpack变量)以添加further item to entry
property。
const myWebpackConfig = {
entry: {
bundle: './client/src/index.js',
vendor: VENDOR_LIBS
}
};
if( /* production env, it depends on your */) {
myWebpackConfig.entry.productionScript = './my-production-script.js',
}
// Return config object
module.exports = myWebpackConfig;
更灵活的方法包括exporting configuration function instead of an object,并在运行--env
命令时通过--env.production
参数指定自定义构建环境键,如webpack
:
//my-webpack-config.js
// Configuration stuff...
module.exports = function(env) {
// env is the "--env" argument your specified with webpack command
if(env.production) {
// Add your production scripts
}
return myWebpackConfig;
}
然后,当运行webpack时:
webpack --config ./my-webpack-config.js --env.production
有关更好地设置webpack配置的一些提示: