我希望在每次提交代码后,Heroku能够构建我的应用程序,这样我就不必每次更改时都上传build
文件夹了。但是Heroku只会从package.json
中安装依赖项,而grunt(我的构建工具)及其组件则位于devDependencies
。我希望将它们保留在那里。这里有什么解决办法吗?
我希望在每次提交代码后,Heroku能够构建我的应用程序,这样我就不必每次更改时都上传build
文件夹了。但是Heroku只会从package.json
中安装依赖项,而grunt(我的构建工具)及其组件则位于devDependencies
。我希望将它们保留在那里。这里有什么解决办法吗?
更新: 如评论中所指出的,此操作已不再需要,因为从2018年开始,Heroku更改了其默认行为,会自动安装开发依赖项。
原始回答
Heroku默认仅安装生产依赖项,忽略devDependencies
下的开发依赖项。
将npm的production变量设置为false
即可解决问题:
heroku config:set NPM_CONFIG_PRODUCTION=false
请访问Heroku Node.js支持页面获取更多信息。
NPM_CONFIG_LOGLEVEL=error
NPM_CONFIG_PRODUCTION=false
NODE_ENV=production
NODE_MODULES_CACHE=true
- bithavocYARN_PRODUCTION=false
。 - kylesimmonds保持 NPM_CONFIG_PRODUCTION
true
,我使用了Heroku的脚本钩子:
"scripts": {
...
"heroku-prebuild": "export NPM_CONFIG_PRODUCTION=false; export NODE_ENV=; NPM_CONFIG_PRODUCTION=false NODE_ENV=development npm install --only=dev --dev",
"heroku-postbuild": "export NPM_CONFIG_PRODUCTION=true; export NODE_ENV=production;",
...
},
最终对我有用了。
npm install --production=false
可以解决上述问题。 - Moshishoscripts": {
...
"heroku-prebuild": "npm install --only=dev"
}
heroku config:set NPM_CONFIG_PRODUCTION=false
请保持原样设置。我希望有更好的解决方案。
NODE_ENV=production
。这是好的,因为它导致/允许修剪,但它也意味着NPM不会安装devDependencies。--production=false
,这样它将安装依赖项和devDependencies。package.json
中的scripts
中有一行:"install": "npm i --prefix ... --production=false"
要卸载依赖项,您需要执行以下操作:
更新 NPM_CONFIG_PRODUCTION
heroku 配置变量设置
NPM_CONFIG_PRODUCTION=false
添加 heroku-prebuild:
scripts": {
...
"heroku-prebuild": "npm install"
}
or
scripts": {
...
"heroku-prebuild": "npm install --only=dev"
}
自2018年3月1日起,Heroku默认安装devDependencies,然后在构建完成后进行修剪:
默认情况下,Heroku将安装在
dependencies
和devDependencies
下列出的所有依赖项。运行安装和构建步骤后,Heroku将删除在
devDependencies
下声明的软件包,然后部署应用程序。Heroku使用锁定文件,即
package-lock.json
或yarn.lock
,来安装预期的依赖树,请确保将这些文件提交到git中,以确保在各个环境中使用相同的依赖版本。
你可以在构建脚本中使用这个命令 "build": "npm install --only=dev"
,如果你还想执行其他操作,比如用babel转译你的代码,你可以像这样做 "build": "npm install --only=dev && babel src --out-dir dist --copy-files"