13

我正在尝试将一个简单的基于 node.js express 的应用程序部署到 heroku,这显然是非常基本的:https ://devcenter.heroku.com/articles/nodejs

这是我的 package.json:

{
  "name": "cours-lic3-blois",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "*",
    "ejs": "*",
    "github-flavored-markdown": "*",
    "less-middleware": "*"
  },
  "engines": {
    "node": "0.8.8",
    "npm": "1.1.65"
  }
}

当我git push heroku master得到以下跟踪时:

 -----> Heroku receiving push
 -----> Node.js app detected
 -----> Resolving engine versions
        Using Node.js version: 0.8.8
        Using npm version: 1.1.65
 -----> Fetching Node.js binaries
 -----> Vendoring node into slug
 -----> Installing dependencies with npm
        npm ERR! Error: ENOENT, chmod '/tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express'
        npm ERR! If you need help, you may report this log at:
        npm ERR!     <http://github.com/isaacs/npm/issues>
        npm ERR! or email it to:
        npm ERR!     <npm-@googlegroups.com>

        npm ERR! System Linux 2.6.32-348-ec2
        npm ERR! command "/tmp/node-node-tonf/bin/node" "/tmp/node-npm-NG88/cli.js" "rebuild"
        npm ERR! cwd /tmp/build_1suuxlhd9s8n6
        npm ERR! node -v v0.8.8
        npm ERR! npm -v 1.1.65
        npm ERR! path /tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express
        npm ERR! code ENOENT
        npm ERR! errno 34
        npm ERR!
        npm ERR! Additional logging details can be found in:
        npm ERR!     /tmp/build_1suuxlhd9s8n6/npm-debug.log
        npm ERR! not ok code 0
  !     Failed to rebuild dependencies with npm
  !     Heroku push rejected, failed to compile Node.js app

 To git@heroku.com:fast-everglades-2007.git
  ! [remote rejected] master -> master (pre-receive hook declined)
 error: failed to push some refs to 'git@heroku.com:fast-everglades-2007.git'

我试图在我的 package.json 中调整各种版本,但无济于事。我正在 Windows 上开发,这个 ENOENT 问题可能是由于某些文件模式问题造成的。

4

5 回答 5

18

我通过以下方式解决了这个问题:

  • 确保 Procfile 提交到 git

  • 删除 node_modules/ 文件夹并将其提交到 git (git rm -r node_modules/)

之后,我做了 git push heroku master 然后错误消失了。

于 2013-02-14T09:07:31.190 回答
10

我遇到了这个问题,这是因为:

  1. 我保持node_modules版本控制
  2. bin在我的 .gitignore 文件中

npm正在尝试chmod express/bin/express,但由于我的.gitignore这个文件不在 git 中,因此在部署期间没有被克隆,所以它失败了。我没有注意到它,因为本地npm安装会bin/express照常创建文件。

删除bin.gitignore提交丢失的文件为我解决了这个问题。

于 2013-02-23T00:34:51.480 回答
4

Heroku 团队,您能否考虑将 npm 配置为npm install --no-bin-links --production默认使用,或者创建一个环境变量让用户设置该标志。这是节点安装中的一个严重错误。从我的 .gitignore 中删除 bin 目录(如下所示)使我能够进行部署,但它在跨平台开发环境中有效地破坏了使用 git,需要在 node_modules 可能已更改的每个 git pull 上进行显式的 npm 重建。

NPM 最佳实践是避免在 .gitignore 中包含 node_modules(请参阅http://www.futurealoof.com/posts/nodemodules-in-git.html)。

我相信--no-bin-links这将提供两全其美的效果,在已排除 bin 目录的情况下启用 node_modules 的部署,支持 npm 重建,但在创建 bin 链接时不会失败。

我在这里提交了一个拉取请求:https ://github.com/heroku/heroku-buildpack-nodejs/pull/33

谢谢!

于 2013-03-21T22:31:38.393 回答
0

通过将 gruntfile.js 重命名为 Gruntfile.js 解决了类似的问题

于 2014-09-10T11:20:12.410 回答
0

几天前我遇到了类似的问题,我认为是因为我导入了我创建的模块,这就是错误的原因;我这样更正它:我将模块称为“路径” const path = require ("path") ,然后在导入模块的位置加入文件路径 const myModule = require (path.join (__ dirname, 'MyModule.js'))

于 2020-11-10T15:48:16.080 回答