package.json 启动脚本,babel-node:在 heroku deploy 上找不到

Posted

技术标签:

【中文标题】package.json 启动脚本,babel-node:在 heroku deploy 上找不到【英文标题】:package.json start script, babel-node: not found on heroku deploy 【发布时间】:2016-08-15 08:37:52 【问题描述】:

当我在本地运行 heroku local 或仅在本地运行 npm start 时,我的应用程序构建并运行良好。但是,当我部署到 heroku 时,应用程序崩溃说它找不到 babel-node。

这是日志输出:

2016-04-21T22:20:44.320025+00:00 heroku[api]: Deploy 5d9a9da by eagsalazar@gmail.com
2016-04-21T22:20:44.320084+00:00 heroku[api]: Release v9 created by eagsalazar@gmail.com
2016-04-21T22:20:44.542062+00:00 heroku[slug-compiler]: Slug compilation started
2016-04-21T22:20:44.542069+00:00 heroku[slug-compiler]: Slug compilation finished
2016-04-21T22:20:44.501025+00:00 heroku[web.1]: State changed from crashed to starting
2016-04-21T22:20:46.278065+00:00 heroku[web.1]: Starting process with command `npm start`
2016-04-21T22:20:50.467407+00:00 app[web.1]:
2016-04-21T22:20:50.467434+00:00 app[web.1]: > qc-server@1.0.0 start /app
2016-04-21T22:20:50.467435+00:00 app[web.1]: > babel-node index.js
2016-04-21T22:20:50.467436+00:00 app[web.1]:
2016-04-21T22:20:50.479490+00:00 app[web.1]: sh: 1: babel-node: not found
2016-04-21T22:20:50.521936+00:00 app[web.1]:
2016-04-21T22:20:50.538822+00:00 app[web.1]: npm ERR! Linux 3.13.0-79-generic
2016-04-21T22:20:50.539334+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start"
2016-04-21T22:20:50.539595+00:00 app[web.1]: npm ERR! node v5.10.1
2016-04-21T22:20:50.555119+00:00 app[web.1]: npm ERR! npm  v3.8.3
2016-04-21T22:20:50.555339+00:00 app[web.1]: npm ERR! file sh
2016-04-21T22:20:50.555549+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2016-04-21T22:20:50.555769+00:00 app[web.1]: npm ERR! errno ENOENT
2016-04-21T22:20:50.555965+00:00 app[web.1]: npm ERR! syscall spawn
2016-04-21T22:20:50.556142+00:00 app[web.1]: npm ERR! qc-server@1.0.0 start: `babel-node index.js`
2016-04-21T22:20:50.556305+00:00 app[web.1]: npm ERR! spawn ENOENT
2016-04-21T22:20:50.556488+00:00 app[web.1]: npm ERR!
2016-04-21T22:20:50.556666+00:00 app[web.1]: npm ERR! Failed at the qc-server@1.0.0 start script 'babel-node index.js'.
2016-04-21T22:20:50.556854+00:00 app[web.1]: npm ERR! Make sure you have the latest version of node.js and npm installed.
2016-04-21T22:20:50.557017+00:00 app[web.1]: npm ERR! If you do, this is most likely a problem with the qc-server package,
2016-04-21T22:20:50.557175+00:00 app[web.1]: npm ERR! not with npm itself.
2016-04-21T22:20:50.557343+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system:
2016-04-21T22:20:50.557564+00:00 app[web.1]: npm ERR!     babel-node index.js
2016-04-21T22:20:50.557741+00:00 app[web.1]: npm ERR! You can get information on how to open an issue for this project with:
2016-04-21T22:20:50.557916+00:00 app[web.1]: npm ERR!     npm bugs qc-server
2016-04-21T22:20:50.558110+00:00 app[web.1]: npm ERR! Or if that isn't available, you can get their info via:
2016-04-21T22:20:50.558306+00:00 app[web.1]: npm ERR!     npm owner ls qc-server
2016-04-21T22:20:50.558492+00:00 app[web.1]: npm ERR! There is likely additional logging output above.
2016-04-21T22:20:50.563859+00:00 app[web.1]:
2016-04-21T22:20:50.567790+00:00 app[web.1]: npm ERR! Please include the following file with any support request:
2016-04-21T22:20:50.568004+00:00 app[web.1]: npm ERR!     /app/npm-debug.log
2016-04-21T22:20:51.824822+00:00 heroku[web.1]: State changed from starting to crashed
2016-04-21T22:20:51.808246+00:00 heroku[web.1]: Process exited with status 1

我的 package.json:


  "name": "qc-server",
  "version": "1.0.0",
  "description": "xxxx",
  "main": "index.js",
  "scripts": 
    "test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js 'test/**/*.js'",
    "test:watch": "npm run test -- --watch -G",
    "start": "babel-node index.js"
  ,
  "babel": 
    "presets": [
      "es2015"
    ]
  ,
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": 
    "babel-cli": "^6.6.0",
    "babel-core": "^6.6.0",
    "babel-eslint": "^5.0.0",
    "babel-preset-es2015": "^6.6.0",
    "chai": "^3.5.0",
    "chai-immutable": "^1.5.3",
    "eslint": "^2.2.0",
    "eslint-config-airbnb": "^6.0.2",
    "eslint-plugin-react": "^4.1.0",
    "mocha": "^2.4.5"
  ,
  "dependencies": 
    "express": "^4.13.4",
    "immutable": "^3.7.6",
    "node-uuid": "^1.4.7",
    "redux": "^3.3.1",
    "socket.io": "^1.4.5"
  

有人有建议吗?

【问题讨论】:

在使用 elasticbeanstalk 时也遇到了同样的问题,我尝试过认为这可能只是一些 heroku 怪癖。 【参考方案1】:

具体来说,在“package.json 文件”中的“dependencies”下包含必要的依赖项,而不是“devDependencies”。这是因为 Heroku 在完成构建过程后会修剪(删除)您的“devDependencies”,只留下“依赖项”,以保持应用程序尽可能精简。

如果您使用 ES6 模块构建 NodeJS 应用程序并在“devDependencies”而不是“dependencies”下包含必要的依赖项,即“@babel/”系列依赖项,这会导致错误。

更新

您应该始终在部署之前构建您的 NodeJS 应用程序,以便您始终在实时环境中运行生产构建,从而以更少的资源更快地执行。

【讨论】:

【参考方案2】:

您必须在 package.json 中包含依赖项,以便在部署时安装它。

$ npm install babel-cli -S

您必须将start 命令更改为:

"start": "babel-node index.js"

有关在 heroku.com 上部署 babel 的更多信息,请参阅 here。

警告:不建议在生产环境中使用 babel-node

【讨论】:

实际上并不需要更改启动命令,但您确实需要将 babel 放入依赖项中,而不是 devDependencies。 Heroku will not install devDependencies 默认 按照 Babel 团队的建议,您不应该在生产环境中使用 babel-node:babeljs.io/docs/usage/cli/#babel-node【参考方案3】:

我遇到了同样的问题,但我认为将NPM_CONFIG_PRODUCTION=false 设置为安装devDependencies 会更好。我使用了以下命令:

heroku config:set NPM_CONFIG_PRODUCTION=false

【讨论】:

+1 我认为这是一个比安装 babel-node、nodemon 等作为常规依赖项更好的解决方案 这会对应用程序的性能产生负面影响吗?如果尝试构建生产系统,将NPM_CONFIG_PRODUCTION 设置为false 的后果是什么?更新:看起来下面的更新解决了这个问题。

以上是关于package.json 启动脚本,babel-node:在 heroku deploy 上找不到的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 NPM package.json 中将我的“启动”脚本设置为啥?

package.json 启动脚本,babel-node:在 heroku deploy 上找不到

链接 package.json 脚本以启动 Express 服务器和 Vue 应用程序

从命令行运行 `node index.js` 可以,但是当我在 package.json 中使用启动脚本时,我得到一个 EADDRINUSE /usr/bin/local/node 错误

Bash 脚本:如何用 sed 替换 package.json 中的文本

package.json 中的多个命令