Node.js 如何在heroku上从源代码编译引导作为构建过程的一部分?
我正在构建一个简单的节点应用程序,并使用引导来设计我的前端。我想通过从GitHub存储库加载应用程序来将其部署到Heroku。我不想将任何已编译的CSS/JS文件放在存储库中,这意味着在从GitHub提取源代码后,需要在Heroku上编译它们 问题:Bootstrap的默认Node.js 如何在heroku上从源代码编译引导作为构建过程的一部分?,node.js,twitter-bootstrap,heroku,npm,Node.js,Twitter Bootstrap,Heroku,Npm,我正在构建一个简单的节点应用程序,并使用引导来设计我的前端。我想通过从GitHub存储库加载应用程序来将其部署到Heroku。我不想将任何已编译的CSS/JS文件放在存储库中,这意味着在从GitHub提取源代码后,需要在Heroku上编译它们 问题:Bootstrap的默认包.json在devDependencies中有其构建依赖项,因此这些依赖项不会安装在Heroku上,Heroku在生产模式下运行npm install 具体来说,问题出现在我的postinstall脚本中,该脚本由cd no
包.json
在devDependencies
中有其构建依赖项,因此这些依赖项不会安装在Heroku上,Heroku在生产模式下运行npm install
具体来说,问题出现在我的postinstall
脚本中,该脚本由cd node\u模块/引导和&npm安装和../.bin/grunt dist
组成。我自己的npm install
命令没有安装任何东西,因为最重要的npm install--production
忽略了引导的devDependencies
要在本地安装引导的依赖项,最好的解决方法是什么?我愿意更改我的工作流程,只要:(1)我不必将编译后的文件放入源代码存储库;(2)我仍然可以在生产模式下运行主npm install
编辑:除非有人能想出更好的解决方案,否则我认为目前我的选择如下:
依赖项中,而不是devdependency
我想我会尝试选择1,如果失败,我会选择3。我仍然有兴趣听到人们提出的任何其他想法。我会研究如何使用
postinstall
。官方文档在Heroku上。因为您在部署时要执行一些构建步骤,所以需要一些依赖性(在您的情况下是引导源代码),但是Heroku将只在生产模式下安装,就像您所说的
与heroku toolbelt客户端连接时,运行:
heroku config:set NPM_CONFIG_PRODUCTION=false
您将拥有您的devdependency,并且能够构建
您只需执行一次(无需每次部署时都执行)
PS:我不知道您的项目,但可能您需要将节点_ENV
放入生产
,以下是命令:
heroku config:set NODE_ENV=production
您不需要将
NPM\u CONFIG\u PRODUCTION
标志恢复为true,这是在heroku上构建的目的
但如果您愿意,以下是您可以使用的工作流(您说过您已打开以更改工作流):
- 忽略源repo中的dist文件夹(该文件夹应已被忽略)
- 将
文件夹设为git repo&将heroku的git remote添加到dist
文件夹的repo中dist
cd dist
git init
git远程添加源git@heroku.com:项目名称.git
git拉入原点主控器
- 确保您的构建例程没有删除此
文件夹-您可以使用以下glob(如果您将rimraf或类似的东西与grunt/gulp或其他任何东西一起使用):/dist/.git
['/dist/***','/dist/!.git/***']
- 构建(使用您的工具)
cd dist
git添加。
git提交-m“捆绑新版本”
在那里,您位于git-push-origin-master
文件夹中,其中origin是heroku的遥控器dist
您可能会对github页面执行相同的操作…对不起,我已经修改了我原来的问题,使之更加清晰。我正在使用
postinstall
运行引导安装和编译。但是,由于安装是在生产模式下运行的,--production
标志将传递到我的postinstall
脚本,并阻止安装引导的devdependency
。将NPM\u CONFIG\u production
设置为false
,部署就正确构建了。不幸的是,一旦我将其设置回true
,下一次部署将失败,因为Heroku buildpack会在部署开始时销毁节点模块
目录,并从头开始重建所有依赖项。