如何在heroku上编译Bootstrap作为构建过程的一部分?

时间:2016-02-11 22:15:38

标签: node.js twitter-bootstrap heroku npm

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

问题:Bootstrap的默认package.jsondevDependencies中有构建依赖关系,因此不会在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

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

  1. 构建自定义Github的Bootstrap分支,其依赖关系在dependencies而不是devDependencies
  2. 构建一个自定义的Heroku buildpack,它会以某种方式保留Bootstrap的依赖性
  3. 放弃原则并在本地编译Bootstrap,并将编译好的文件放在我的源代码中
  4. 只需在开发模式下使用Heroku(显然不是一个好主意)
  5. 我想我会尝试选项1,如果失败则选择选项3。我仍然有兴趣听听人们提出的任何其他想法。

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页面做同样的事情......