【问题标题】:Forever errors with babel-nodebabel-node 的永远错误
【发布时间】:2015-08-31 23:22:01
【问题描述】:

我有一个简单的节点服务器:

//server.js

import express  from 'express';
import React    from 'react';
...

当我尝试使用 Forever 运行它时:

forever start -c "babel-node --experimental" server.js ,由于使用import而出错

/Applications/MAMP/htdocs/React/ReactBoilerplates/koba04/app/server.js:1
(function (exports, require, module, __filename, __dirname) { import express  
                                                              ^^^^^^
SyntaxError: Unexpected reserved word
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
error: Forever detected script exited with code: 8

我也尝试过pm2nodemon,在那里我也遇到了同样的错误。 对于 pm2,我关注了这个问题https://github.com/Unitech/PM2/issues/1167,但它也没有工作。我在这里做错了什么?

【问题讨论】:

  • 使用 PM2 即可:pm2 start app.js --interpreter ./node_modules/.bin/babel-node
  • 您似乎忘记在默认情况下使用预设定义 .babelrc 文件

标签: node.js forever babeljs pm2


【解决方案1】:

我建议将您的es6 脚本预编译成es5 脚本并使用forever start server.js 命令运行应用程序,其中server.js 是预编译的结果。

如果您将 react.js 用于同构应用程序,您还需要为浏览器预编译脚本(通过 browserifywebpack 等)。

因此,我认为通过按需编译与使用 gulp 或任何其他 js 构建系统进行预编译相比,使用 es6 脚​​本没有任何好处。

【讨论】:

  • 你的意思是说“编译”而不是“编译”吗?
  • 收益显而易见:无需预编译。
【解决方案2】:

这适用于我的即时转译:forever start -c node_modules/.bin/babel-node server.js

另一种解决方案是像这样使用Require Hook

// server-wrapper.js
require('babel/register');

require('./server.js');

然后运行forever start server-wrapper.js

【讨论】:

    【解决方案3】:
    forever start -c "node -r babel-register" ./src/index.js
    

    同样有效。

    【讨论】:

      【解决方案4】:

      scripts 标签下的package.json 文件中添加如下条目

      package.jsonscripts 标签下

      "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1",
          "start": "forever start -c babel-node src/index.js",
      },
      

      所有依赖项都必须包含在 package.json 文件中的依赖项标记中

      然后做一个npm install 然后 通过执行npm start来运行服务器

      【讨论】:

        猜你喜欢
        • 2019-05-24
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        相关资源
        最近更新 更多