一尘不染

如何将使用grunt的节点应用程序部署到heroku

node.js

我使用的是grunt插件grunt-contrib-copy,也使用了grunt插件grunt-contrib- mincss(在我的应用程序中列为npm依赖项)。

另外,我不提交所有生成文件所在的npm_modules文件夹和public文件夹。grunt build在部署和设置服务器(已经在寻找public文件夹)之后,我不知道如何构建我的应用程序(我有命令)。

我看到了类似的东西grunt-heroku-deploy,但是在上传之前提交似乎是个坏主意。也许有一些温柔的决定…有什么想法吗?


阅读 194

收藏
2020-07-07

共1个答案

一尘不染

npm支持某个postinstall步骤(在其他步骤中),这可能正是您想要的。

当您推送到heroku来解决构建依赖关系时,node.js heroku buildpack将运行以下命令:

$ npm install --production

https://devcenter.heroku.com/articles/nodejs-support#build-
behavior

如果您查看npm文档,则可以设置一系列脚本,以在有人npm install为您的软件包运行之前或之后运行。在的scripts属性中配置package.json。该scripts属性允许grunt在包的生命周期中发生某些事情时运行自定义脚本(包括)。

例如,要回显一些文本并grunt在任何人(包括Heroku)运行时运行命令npm install,请将其添加到您的package.json

{
  ...
  "scripts": {
    "postinstall": "echo postinstall time; ./node_modules/grunt-cli/bin/grunt <your task name>"
  },
  ...
}

https://npmjs.org/doc/scripts.html

重要警告:

  • 您可能必须在postinstall脚本中更改grunt二进制文件的路径,如果grunt命令未执行,请检查错误输出。
  • grunt并且grunt-cli必须dependency在您的计算机中列出为,package.json以便由Heroku安装。将它们列出在下面devDependencies是不够的,因为Heroku不会安装它们。另外,请注意,Heroku不会将其安装为全局软件包,因此要在Heroku上执行它,您将必须使用相对路径(如上配置)。

如果这不起作用(您可能需要稍微弄些相对路径),那么您可能需要考虑为Heroku编写自己的自定义buildpack

更新资料

从0.4开始,grunt软件包不再包含grunt二进制文件,而二进制文件现在已成为grunt-cli软件包的一部分。答案已更新以反映这一点。

2020-07-07