将 node.js 应用程序部署到 heroku 时出错

Posted

技术标签:

【中文标题】将 node.js 应用程序部署到 heroku 时出错【英文标题】:error deploying node.js app to heroku 【发布时间】:2016-04-08 05:00:20 【问题描述】:

我正在尝试将我的 node.js 应用程序部署到 heroku。 我在git push heroku master 收到此错误:

> on-headers@1.0.1 test /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/response-time/node_modules/on-headers
   > mocha --reporter spec --bail --check-leaks test/

   /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/lib/utils.js:626
   throw new Error("cannot resolve path (or pattern) '" + path + "'");
   ^

   Error: cannot resolve path (or pattern) 'test/'
   at Object.lookupFiles (/tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/lib/utils.js:626:15)
   at /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/bin/_mocha:316:30
   at Array.forEach (native)
   at Object.<anonymous> (/tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/bin/_mocha:315:6)
   at Module._compile (module.js:435:26)
   at Object.Module._extensions..js (module.js:442:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:311:12)
   at Function.Module.runMain (module.js:467:10)
   at startup (node.js:136:18)
   at node.js:963:3

   > node-statsd@0.1.1 test /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/soluto-monitor/node_modules/node-statsd
   > mocha -R spec

   /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/lib/utils.js:626
   throw new Error("cannot resolve path (or pattern) '" + path + "'");
   ^

   Error: cannot resolve path (or pattern) 'test'
   at Object.lookupFiles (/tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/lib/utils.js:626:15)
   at /tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/bin/_mocha:316:30
   at Array.forEach (native)
   at Object.<anonymous> (/tmp/build_4d6fe429e576b4e42425b713c87264e9/node_modules/mocha/bin/_mocha:315:6)
   at Module._compile (module.js:435:26)
   at Object.Module._extensions..js (module.js:442:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:311:12)
   at Function.Module.runMain (module.js:467:10)
   at startup (node.js:136:18)
   at node.js:963:3
...

.. 不断出现每个 node_modules 子目录的错误 Error: cannot resolve path (or pattern) 'test/'

我的 package.json 看起来或多或少是这样的:


  "name": "my-module",
  "version": "0.1.0",
  "description": "My Module",
 "dependencies": 
    "azure-storage": "0.6.0",
    "bluebird": "3.0.6",
    "body-parser": "1.14.1",
    "cors": "2.7.1",
    "dotenv": "^1.2.0",
    "express": "3.3.3",
    "moment": "2.10.6",
    "request-promise": "1.0.2",
    "rx": "4.0.7",
    "shisell": "0.0.2",
    "striptags": "2.0.4",
    "winston": "2.1.1"
  ,
  "devDependencies": 
    "chai": "^3.4.1",
    "chai-as-promised": "^5.1.0",
    "mocha": "^2.3.4",
    "mock-require": "^1.2.1",
    "sinon": "^1.17.2",
    "sinon-chai": "^2.8.0",
    "supertest": "^1.1.0"
  ,
  "main": "server.js",
  "engines": 
    "node": "4.2.3"
  ,
  "scripts": 
    "test": "mocha"
  

似乎 mocha 试图从 node_modules 中运行,在每个依赖项中。我设法通过在 node_modules 目录之一中运行 mocha 在本地重现错误。

我尝试从我的 package.json 中删除 test 脚本,但仍然遇到同样的错误。

我是 heroku 部署的新手。据我所知,一旦我 git push 到 heroku,heroku 就会运行 npm install,如果有测试脚本,它将运行。但我不明白是什么原因导致它尝试在 node_modules 的子目录中运行 mocha(以及为什么即使我没有在 package.json 中指定测试脚本也会发生这种情况)。

有什么想法吗?

附言当我在我的机器上本地运行时不会发生这种情况。

【问题讨论】:

【参考方案1】:

原来我在 heroku 上设置了这个环境变量:NPM_CONFIG_NPAT=true,它会导致 npm 对所有安装运行测试,如下所述: https://docs.npmjs.com/misc/config#npat

【讨论】:

以上是关于将 node.js 应用程序部署到 heroku 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将 node.js 应用程序部署到 heroku?有没有可能?

应用程序中发生错误,无法提供您的页面将 Node.Js REST 部署到 heroku

Node.js 应用程序无法部署到 Heroku

将 node.js 应用程序部署到 Heroku 时如何执行自定义构建脚本

Gulp 将 Node 应用的 dist 文件夹部署到 Heroku

Heroku 部署 - “推送被拒绝,无法编译 Node.js 应用程序”