在 Heroku 上运行 Grunt Build 时出错

Posted

技术标签:

【中文标题】在 Heroku 上运行 Grunt Build 时出错【英文标题】:Error running Grunt Build on Heroku 【发布时间】:2015-06-21 11:41:55 【问题描述】:

所以我在 Heroku 上安装了一个使用 Yeoman Backbone generator 生成的简单 Backbone 应用程序。我有一个非常简单的 node.js 服务器文件来提供 Backbone 应用程序,但由于缺少依赖项而无法部署到 Heroku:

输出:

remote:        Loading "Gruntfile.js" tasks...ERROR
remote:        >> Error: Cannot find module 'connect-livereload'
remote:        Warning: Task "build" not found. Use --force to continue.

Server.js

var express = require('express');
var app = express();
var port = process.env.PORT || 8080;

app.use(express.static(__dirname + '/app'));
app.listen(port, function() 
    console.log('App is running on port ' + port);
);

packages.json


  "name": "ssi",
  "version": "0.0.0",
  "dependencies": 
    ...
  ,
  "devDependencies": 
    "bower": "^1.4.1",
    "connect": "^3.3.5",
    "grunt": "^0.4.5",
    "grunt-cli": "^0.1.13",
    ...
  ,
  "engines": 
    "node": ">=0.10.0"
  ,
  "scripts": 
    "start": "node server.js",
    "test": "mocha",
    "postinstall": "bower install && grunt build"
  

最初我在运行bower install 时遇到问题,因为我没有在packages.json 中的依赖项中添加bower,所以我想,“也许我必须将它添加到正常的依赖项列表而不是devDependencies,因为这是我的部署过程。

所以我将 bower 和 grunt 添加到依赖项列表中,但是在运行 grunt build 时它会失败,因为现在它找不到在 build 任务期间使用的任何必需的 grunt 模块。我认为必须有更好的方法让 Heroku 看到这些依赖项,而无需将它们添加到生产依赖项列表中。

我已经尝试将 NODE_ENV 变量设置为“开发”,如下所示:

$ heroku config:set NODE_ENV=development

但这似乎没有任何效果。因此,由于我正在回答自己的问题,因此假设的问题是:

“如何让 Heroku 运行 bower install 和 grunt build 而无需将我的所有依赖项移动到生产依赖项列表中?”

注意 - 我意识到“适当的”部署过程可能会将所有这些东西添加到分发文件夹中,包括依赖项。这个问题和答案是针对像我这样的人,他们试图将他们当前的构建推送到 Heroku,而无需设置“更好”的部署过程。

【问题讨论】:

【参考方案1】:

最终解决方案非常简单。在将我的应用推送到 Heroku 时,控制台输出的前几行是以下行:

remote:        NPM_CONFIG_PRODUCTION=true

似乎将此环境变量更改为 false 将导致 NPM 也安装 devDependencies 列表。所以只需输入以下内容:

$ heroku config:set NPM_CONFIG_PRODUCTION=false

然后您应该会看到 Heroku 构建和部署成功。

【讨论】:

以上是关于在 Heroku 上运行 Grunt Build 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上运行预部署 Grunt 任务

停止 Heroku 运行 npm start + 运行啥来代替?

TFS Build 找不到 Grunt

Jhipster部署到Heroku返回404

使用 grunt、bower、node 模块部署到 heroku

应用程序在“grunt build”后停止工作(控制台中没有错误)