【问题标题】:How to compile Bootstrap from source as part of build process on heroku?作为heroku构建过程的一部分,如何从源代码编译Bootstrap?
【发布时间】:2016-02-13 07:40:07
【问题描述】:

我正在构建一个简单的节点应用程序并使用 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. 构建 Bootstrap 的自定义 Github 分支,其依赖项位于 dependencies 而不是 devDependencies
  2. 构建一个自定义 Heroku 构建包,以某种方式使 Bootstrap 的依赖项保持不变
  3. 放弃原理,在本地编译Bootstrap,把编译好的文件放到我的源码中
  4. 只在开发模式下使用 Heroku(显然不是一个好主意)

我想我会尝试选项 1,如果失败则选择选项 3。我仍然有兴趣听到人们提出的任何其他想法。

【问题讨论】:

    标签: node.js twitter-bootstrap heroku npm


    【解决方案1】:

    我会考虑使用postinstall。官方文档在 Heroku here

    【讨论】:

    • 对不起,我已经修改了我原来的问题更清楚。我正在使用 postinstall 运行 Bootstrap 安装和编译。但由于安装在生产模式下运行,--production 标志会传播到我的postinstall 脚本并阻止安装 Bootstrap 的devDependencies
    【解决方案2】:

    由于您在部署时执行了一些构建步骤,因此您需要一些 devDependencies(在您的情况下为引导源),但正如您所说,heroku 只会在生产模式下安装。

    连接 heroku toolbelt 客户端后,运行:

    heroku config:set NPM_CONFIG_PRODUCTION=false
    

    你将拥有你的 devDependencies 并且你将能够构建。

    您只需执行一次(无需在每次部署时都执行此操作)。

    PS:我不知道你的项目,但也许你需要把NODE_ENVproduction,这里是命令:

    heroku config:set NODE_ENV=production
    

    【讨论】:

    • NPM_CONFIG_PRODUCTION 设置为false,部署已正确构建。不幸的是,一旦我将其设置回true,下一次部署将失败,因为 Heroku buildpack 在部署开始时破坏了node_modules 目录并从头开始重建所有依赖项。
    【解决方案3】:

    您不需要将NPM_CONFIG_PRODUCTION 标志恢复为true,这是在heroku 上进行构建的目的。

    但如果您愿意,这里是您可以使用的工作流程(您说您可以更改工作流程):

    • 从您的源代码库中忽略 dist 文件夹(它应该已经被忽略了)
    • 使dist 文件夹成为一个git repo 并将heroku 的git 远程添加到dist 文件夹的repo 中
      • cd dist
      • git init
      • git remote add origin git@heroku.com:project-name.git
      • git pull origin master
    • 确保您的构建例程不会删除此 /dist/.git 文件夹 - 您可以使用以下 glob(如果您使用 rimraf 或类似的 grunt/gulp 或其他东西):['/dist/**/*','/dist/!.git/**/*']

    这样,您的工作流程将是:

    • 构建(使用您的工具)
    • cd dist
    • git add .
    • git commit -m "new version bundled"
    • git push origin master 那里,您在 dist 文件夹中,其中 origin 是您 heroku 的远程位置

    你可能对 github 页面做同样的事情......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2010-09-17
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多