我正在尝试将一个简单的node.js基于表达式的应用程序部署到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问题。
答案 0 :(得分:16)
我解决了这个问题:
确保将Procfile提交到git
删除node_modules /文件夹并将其提交到git(git rm -r node_modules /)
之后,我做了git push heroku master然后错误就消失了。
答案 1 :(得分:9)
我遇到了这个问题,原因是:
node_modules
bin
npm
正在尝试chmod express/bin/express
,但由于我的.gitignore
此文件不在git中,因此在部署期间未被克隆,因此失败了。我没有注意到它,因为本地npm
安装会像往常一样创建bin/express
文件。
从bin
删除.gitignore
并提交丢失的文件为我解决了问题。
答案 2 :(得分:4)
Heroku团队,您是否可以考虑将npm配置为默认使用npm install --no-bin-links --production
,或创建环境变量以允许用户设置该标志。这是节点安装中的一个严重错误。从我的.gitignore中删除bin目录(如下所示)使我能够部署,但它在跨平台开发环境中有效地使用git中断,需要在每个git pull上进行显式的npm重建,其中node_modules可能已经改变。
NPM最佳做法是避免在.gitignore中使用node_modules(请参阅http://www.futurealoof.com/posts/nodemodules-in-git.html)。
我相信--no-bin-links
将提供两全其美的优势,支持部署node_modules,其中bin目录已被排除,支持npm rebuild,但在创建bin链接时不会失败。
我在此处提交了一个拉取请求:https://github.com/heroku/heroku-buildpack-nodejs/pull/33
谢谢!
答案 3 :(得分:0)
通过将gruntfile.js重命名为Gruntfile.js
来修复类似的问题答案 4 :(得分:0)
几天前,我遇到了类似的问题,我想这是因为我导入了我创建的模块,而这正是导致错误的原因。
我像这样纠正它:
我称模块为“路径”
const path = require ("path")
然后在我的模块导入的地方,我加入了文件路径
const myModule = require (path.join (__ dirname, 'MyModule.js'))