我的印象是,当我使用Webpack向Heroku部署基于反应的应用程序时,我不需要包含devDependencies。例如,这是我的包裹。
"scripts": {
"test": "",
"start": "./node_modules/.bin/babel-node server",
"build": "rimraf dist && export NODE_ENV=production && webpack --config ./webpack.production.config.js --progress --profile --colors",
"postinstall": "node deploy",
"eslint": "eslint .",
"jscs": "jscs ."
},
和deploy.js:
if (process.env.NODE_ENV === 'production') {
var child_process = require('child_process');
child_process.exec("webpack -p --config webpack.production.config.js", function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
}
和Procfile
web ./node_modules/.bin/babel-node server.js
然而,当我推送到Heroku时,我不断地得到一个无法识别的webpack命令,因此我将所有devDependencies包含为正常的依赖项以使其正常工作。我在这里错过了什么吗?
答案 0 :(得分:7)
默认情况下,Heroku将NPM_CONFIG_PRODUCTION设置为true以仅安装依赖项。如果要安装devDependencies,可以禁用生产模式:
$ heroku config:set NPM_CONFIG_PRODUCTION=false
但是,由于您通常不希望生产构建中的所有devDependencies,因此最好只将生产构建实际需要的依赖项移动到依赖项(bower,grunt,gulp等)。