我正在构建一个简单的节点应用程序,并使用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
,我就可以更改我的工作流程。
编辑:除非有人能想到更好的解决方案,否则我认为我现在的选择如下:
- 构建 Bootstrap 的自定义 Github 分支,其依赖项在
dependencies
而不是devDependencies
- 构建一个自定义的 Heroku 构建包,以某种方式保持 Bootstrap 的依赖项完好无损
- 放弃原则,在本地编译引导,把编译好的文件放在我的源代码中
- 只需在开发模式下使用Heroku(显然不是一个好主意(
我想我会尝试选项 1,如果失败,我会选择选项 3。我仍然有兴趣听到人们提出的任何其他想法。
我会考虑使用postinstall
.官方文档在这里关于Heroku。
由于您在部署时执行一些构建步骤,因此您需要一些 devDependencies(在您的情况下是引导源(,但 heroku 只会在生产模式下安装,就像您所说的那样。
与 heroku 工具带客户端连接时,运行:
heroku config:set NPM_CONFIG_PRODUCTION=false
你将拥有你的开发依赖项,并且能够生成。
您只需执行此操作一次(无需在每次部署时都执行此操作(。
PS:我不知道你的项目,但也许你需要把NODE_ENV
放到production
,这是命令:
heroku config:set NODE_ENV=production
你不需要把NPM_CONFIG_PRODUCTION
标志放回原点,这就是在 heroku 上进行构建的目的。
但是,如果您愿意,可以使用以下工作流(您说打开以更改工作流(:
- 忽略源存储库中的
dist
文件夹(应已忽略( dist
文件夹设为 git 存储库,并在dist
文件夹的存储库中添加 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 或其他什么(:['/dist/**/*','/dist/!.git/**/*']
这样,您的工作流程将是:
- 构建(使用您的工具(
-
cd dist
-
git add .
-
git commit -m "new version bundled"
-
git push origin master
那里,您dist
文件夹中,其中 origin 是您的 heroku 的遥控器
你可能会对github页面做同样的事情......