Node.js 如何在heroku上从源代码编译引导作为构建过程的一部分?

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

我正在构建一个简单的节点应用程序,并使用引导来设计我的前端。我想通过从GitHub存储库加载应用程序来将其部署到Heroku。我不想将任何已编译的CSS/JS文件放在存储库中,这意味着在从GitHub提取源代码后,需要在Heroku上编译它们

问题:Bootstrap的默认
包.json
devDependencies
中有其构建依赖项,因此这些依赖项不会安装在Heroku上,Heroku在生产模式下运行
npm install

具体来说,问题出现在我的
postinstall
脚本中,该脚本由
cd node\u模块/引导和&npm安装和../.bin/grunt dist
组成。我自己的
npm install
命令没有安装任何东西,因为最重要的
npm install--production
忽略了引导的
devDependencies

要在本地安装引导的依赖项,最好的解决方法是什么?我愿意更改我的工作流程,只要:(1)我不必将编译后的文件放入源代码存储库;(2)我仍然可以在生产模式下运行主
npm install

编辑:除非有人能想出更好的解决方案,否则我认为目前我的选择如下:

  • 构建一个自定义Github引导分支,它的依赖项位于
    依赖项中,而不是
    devdependency
  • 构建一个定制的Heroku构建包,以某种方式保持引导的依赖关系不变
  • 放弃原则,在本地编译引导程序,并将编译后的文件放在我的源代码中
  • 只需在开发模式中使用Heroku(显然不是一个好主意)

  • 我想我会尝试选择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文件夹(该文件夹应已被忽略)
    • dist
      文件夹设为git repo&将heroku的git remote添加到
      dist
      文件夹的repo中
      • cd dist
      • git init
      • git远程添加源git@heroku.com:项目名称.git
      • git拉入原点主控器
    • 确保您的构建例程没有删除此
      /dist/.git
      文件夹-您可以使用以下glob(如果您将rimraf或类似的东西与grunt/gulp或其他任何东西一起使用):
      ['/dist/***','/dist/!.git/***']
    这样,您的工作流程将是:

    • 构建(使用您的工具)
    • cd dist
    • git添加。
    • git提交-m“捆绑新版本”
    • git-push-origin-master
      在那里,您位于
      dist
      文件夹中,其中origin是heroku的遥控器

    您可能会对github页面执行相同的操作…

    对不起,我已经修改了我原来的问题,使之更加清晰。我正在使用
    postinstall
    运行引导安装和编译。但是,由于安装是在生产模式下运行的,
    --production
    标志将传递到我的
    postinstall
    脚本,并阻止安装引导的
    devdependency
    。将
    NPM\u CONFIG\u production
    设置为
    false
    ,部署就正确构建了。不幸的是,一旦我将其设置回
    true
    ,下一次部署将失败,因为Heroku buildpack会在部署开始时销毁
    节点模块
    目录,并从头开始重建所有依赖项。