部署到 Heroku 后触发 Webpack 构建的最佳方式是什么?
在不是最漂亮的解决方案中推送已经捆绑的版本。
这是一个什么样的应用程序?如果您使用的是 package.json,您可以使用 npm 脚本在安装后步骤中运行 webpack。
你可以postinstall
在你的 package.json 中设置如下NODE_ENV=production webpack -p
然后设置start
为node
但是您需要确保将 webpack 配置为生产环境,方法是在 webpack.config.js 或 webpack.config.js(production) 中将其设置为生产配置。
我将 webpack.config.js 中的所有内容设置如下..
const path = require('path');
const webpack = require('webpack');
const debug = process.env.NODE_ENV !== "production";
module.exports = {
entry: [
'./src/index.js'
],
output: {
path: path.resolve(__dirname, 'src'),
filename: 'bundle.js'
},
devtool: debug ? "inline-sourcemap" : null,
module: {
loader: [{
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['angular']
}
},
{
test: /\.css$/,
loader: "style-loader!css-loader"
}]
},
devServer: {
historyApiFallback: true,
contentBase: 'src'
},
plugins: debug ? [] : [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({
mangle: {except: ['$', 'exports', 'require', 'app']},
compress: {warnings: false},
sourceMap: false
})
]
}
所以基本上,一旦命令运行,npm run postinstall
bundle 将根据 webpack.config.js(输出)在目录中生成。NODE_ENV=production webpack -p
但请记住在运行“npm start”之前将命令包含在您的 package.json 中。见下面的例子..
{
"name": "",
"version": "1.0.0",
"description": "",
"main": "./src/bundle.js",
"engines": {
"node": "6.4.0"
},
"scripts": {
"start": "node ./src/server.js",
"postinstall": "NODE_ENV=production webpack -p"
},
"author": "",
"license": "ISC",
"dependencies": ...
我通过将 devDependencies 置于正常依赖项中解决了这个问题,并将安装后脚本更改为:
node_modules/.bin/webpack