我正在构建一个简单的节点应用程序并使用Bootstrap来设置我的前端。我想通过从GitHub存储库加载它来将应用程序部署到Heroku。我不想将任何已编译的CSS / JS文件放在存储库中,这意味着在从GitHub中提取源代码后需要在Heroku上编译它们。
问题:Bootstrap的默认package.json
在devDependencies
中有构建依赖关系,因此不会在Heroku上安装依赖项,Heroku在生产模式下运行npm install
。
具体来说,问题出现在我的postinstall
脚本中,该脚本由cd node_modules/bootstrap && npm install && ../.bin/grunt dist
组成。我自己的npm install
命令最终没有安装任何东西,因为总体npm install --production
忽略了Bootstrap的devDependencies
。
让Bootstrap的依赖项在本地安装的最佳解决方法是什么?我愿意改变我的工作流程,只要(1)我不必将编译好的文件放在我的源代码库中,(2)我仍然可以在生产模式下运行主npm install
。
编辑:除非有人能想出更好的解决方案,否则我认为我的选择如下:
dependencies
而不是devDependencies
我想我会尝试选项1,如果失败则选择选项3。我仍然有兴趣听听人们提出的任何其他想法。
答案 0 :(得分:0)
我会考虑使用postinstall
。官方文档是Heroku here。
答案 1 :(得分:0)
由于您在部署时执行了一些构建步骤,因此您需要一些devDependencies(在您的情况下为bootstrap源),但heroku只会安装在生产模式中,就像您说的那样。
与heroku toolbelt客户端连接后,运行:
heroku config:set NPM_CONFIG_PRODUCTION=false
您拥有自己的开发依赖关系,并且您将能够构建。
您只需执行一次(每次部署时无需执行此操作)。
PS:我不了解你的项目,但也许你需要将NODE_ENV
放到production
,这是命令:
heroku config:set NODE_ENV=production
答案 2 :(得分:0)
您不需要将NPM_CONFIG_PRODUCTION
标志恢复为true,这是在heroku上进行构建的目的。
但如果您愿意,这里是您可以使用的工作流程(您说您已经打开以更改工作流程):
dist
文件夹(它应该已被忽略)dist
文件夹设为git repo&在dist
文件夹的repo中添加heroku的git remote
cd dist
git init
git remote add origin git@heroku.com:project-name.git
git pull origin master
/dist/.git
文件夹 - 您可以使用以下glob(如果您正在使用rimraf或类似grunt / gulp或类似的东西):{ {1}} 这样,您的工作流程将是:
['/dist/**/*','/dist/!.git/**/*']
cd dist
git add .
git commit -m "new version bundled"
,你在git push origin master
文件夹中,原点是你的heroku的遥控器你可以用github页面做同样的事情......