首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未在Heroku上安装babel-node

未在Heroku上安装babel-node
EN

Stack Overflow用户
提问于 2017-07-17 19:38:33
回答 2查看 2.1K关注 0票数 0

我在Heroku上使用了babel-node的ES6语法,但在部署时我得到了一个构建错误。上面写着"babel-node:找不到“。我已经在我的本地计算机上尝试了一个干净的安装,它工作得很好。Package.json:

代码语言:javascript
复制
{
  "name": "secret",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "./node_modules/.bin/babel-node ./bin/www"
  },
  "engines": {
    "node": "7.5.0",
    "npm": "5.0.3"
  },
  "dependencies": {
    "babel-cli": "^6.24.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    ...
  }
}

感谢您的帮助!:)

代码语言:javascript
复制
2017-07-17T11:02:26.997876+00:00 heroku[web.1]: State changed from crashed to starting
2017-07-17T11:02:31.839278+00:00 heroku[web.1]: Starting process with command `npm start`
2017-07-17T11:02:38.074157+00:00 heroku[web.1]: State changed from starting to crashed
2017-07-17T11:02:38.062607+00:00 heroku[web.1]: Process exited with status 1
2017-07-17T11:02:37.865774+00:00 app[web.1]:
2017-07-17T11:02:37.865786+00:00 app[web.1]: > secret@0.0.0 start /app
2017-07-17T11:02:37.865787+00:00 app[web.1]: > babel-node ./bin/www
2017-07-17T11:02:37.865787+00:00 app[web.1]:
2017-07-17T11:02:37.936361+00:00 app[web.1]: sh: 1: babel-node: not found
2017-07-17T11:02:37.966452+00:00 app[web.1]: npm ERR! file sh
2017-07-17T11:02:37.966683+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2017-07-17T11:02:37.966931+00:00 app[web.1]: npm ERR! errno ENOENT
2017-07-17T11:02:37.967106+00:00 app[web.1]: npm ERR! syscall spawn
2017-07-17T11:02:37.967287+00:00 app[web.1]: npm ERR! secret@0.0.0 start: `babel-node ./bin/www`
2017-07-17T11:02:37.967430+00:00 app[web.1]: npm ERR! spawn ENOENT
2017-07-17T11:02:37.967588+00:00 app[web.1]: npm ERR!
2017-07-17T11:02:37.967733+00:00 app[web.1]: npm ERR! Failed at the secret@0.0.0 start script.
2017-07-17T11:02:37.967873+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2017-07-17T11:02:37.969151+00:00 app[web.1]:
2017-07-17T11:02:37.969374+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-07-17T11:02:37.969484+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2017-07-17T11_02_37_957Z-debug.log
2017-07-17T11:25:52.044791+00:00 heroku[web.1]: State changed from crashed to starting
2017-07-17T11:25:54.841341+00:00 heroku[web.1]: Starting process with command `npm start`
2017-07-17T11:25:57.407691+00:00 heroku[web.1]: Process exited with status 1
2017-07-17T11:25:57.413873+00:00 heroku[web.1]: State changed from starting to crashed
2017-07-17T11:25:57.310176+00:00 app[web.1]:
2017-07-17T11:25:57.310190+00:00 app[web.1]: > secret@0.0.0 start /app
2017-07-17T11:25:57.310191+00:00 app[web.1]: > babel-node ./bin/www
2017-07-17T11:25:57.310192+00:00 app[web.1]:
2017-07-17T11:25:57.316940+00:00 app[web.1]: sh: 1: babel-node: not found
2017-07-17T11:25:57.335019+00:00 app[web.1]: npm ERR! file sh
2017-07-17T11:25:57.335287+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2017-07-17T11:25:57.335517+00:00 app[web.1]: npm ERR! errno ENOENT
2017-07-17T11:25:57.335735+00:00 app[web.1]: npm ERR! syscall spawn
2017-07-17T11:25:57.335933+00:00 app[web.1]: npm ERR! secret@0.0.0 start: `babel-node ./bin/www`
2017-07-17T11:25:57.336095+00:00 app[web.1]: npm ERR! spawn ENOENT
2017-07-17T11:25:57.336280+00:00 app[web.1]: npm ERR!
2017-07-17T11:25:57.336449+00:00 app[web.1]: npm ERR! Failed at the secret@0.0.0 start script.
2017-07-17T11:25:57.336614+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2017-07-17T11:25:57.337985+00:00 app[web.1]:
2017-07-17T11:25:57.338232+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-07-17T11:25:57.338379+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2017-07-17T11_25_57_323Z-debug.log
EN

回答 2

Stack Overflow用户

发布于 2021-03-01 05:15:32

babel-node"not meant for production use"。关于使用@babel/cli@babel/core@babel/preset-env,有一个更相关的指南。

babel依赖项应该全部安装为devDependencies,并且在Heroku修剪devDependencies之前,您应该在运行的build脚本中转换代码。请参阅this guide

如果您将所有es6代码移动到应用程序顶层的一个通用目录(如src )中,则可以创建一个构建脚本,将该目录中的所有内容转换为一个如build的输出目录。

代码语言:javascript
复制
"build": "npm run clean && npm run build-babel",
"build-babel": "./node_modules/.bin/babel -d ./build ./src",
"clean": "rm -rf build && mkdir build",

在上面的示例中,build脚本将是run automatically by Herokuclean将创建一个新的构建目录,build-babel将转换代码并将其放置在build目录中。完成此操作后,Heroku将修剪devDependencies,但您将不再需要Babel。

当Heroku调用下面的start时,它将运行您转换的代码。您应该不会再看到sh: 1: babel-node: not found

代码语言:javascript
复制
"scripts": {
  "build": "npm run clean && npm run build-babel",
  "build-babel": "./node_modules/.bin/babel -d ./build ./src",
  "clean": "rm -rf build && mkdir build",
  "start": "node ./build/bin/www"
},

一个潜在的陷阱是,不要从你的start脚本调用build。如果这样做,devDependencies将被修剪,您将得到以下内容

sh: 1: babel: not found

票数 1
EN

Stack Overflow用户

发布于 2018-02-21 03:00:45

有点晚了,但我认为你遗漏了:

步骤(1):终端中的npm install --save babel-cli babel-preset-env

注意步骤1:不要保存到dev,因为这将要求您设置NPM_CONFIG_PRODUCTION=false

第(2)步:如果不添加babel样板和/或使用babelrc文件,则不能将任何内容编译为babel。最简单的方法是在主应用程序文件夹中创建一个.babelrc文件,即。与您的package.json相同,并输入以下内容:

代码语言:javascript
复制
 {
  "presets": ["env"]
}

注意步骤2:使用env preset时,您不需要babel-preset-es2015等

步骤(3):你现在可以使用babel-node运行你的代码,所以在你的例子中执行你的启动脚本,即。./node_modules/.bin/babel-node ./bin/www

如果你需要更多的指导来理解预设逻辑,我建议阅读NPM模块:https://www.npmjs.com/package/babel-preset-env

此外,我建议使用像pm2这样的进程管理器。这允许您的节点实例在崩溃时保持活动状态。forever模块过去可以做到这一点,但pm2要好得多。以下是package.json中的启动脚本示例:

“脚本”:{ " start ":“Node./node_modules/.bin/pm2启动main.json --附加--环境生产”}

Procfile (注意,我使用的是nginx,但只使用npm start就可以了):

代码语言:javascript
复制
web: bin/start-nginx npm start 
worker: node ./node_modules/.bin/pm2 start worker.json --attach

下面是使用babel-node的带有args的main.json (注意,保持实例为1,并且不要在Heroku中派生web dyno ):

main.json:

代码语言:javascript
复制
{
  "name": "the_awesome",
  "script": "app.js",
  "instances": 1,
  "exec_mode": "cluster"
}

worker.json:

代码语言:javascript
复制
{
  "name": "worker",
  "script": "/app/lib/worker.js"
}

(4)如果你在集群模式下使用pm2,在你的app.js和worker.js中添加一个require('babel-register')钩子。如果您没有在集群模式下使用pm2,或者只是没有使用pm2,那么您可以直接使用babel-node来运行您的.js或es6文件

最后,要检查是否真的安装了babel-node,您可以执行以下操作:

代码语言:javascript
复制
 heroku run bash -a {name of your app}
 ls ./node_modules/.bin //babel-node should be present

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45143298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档