【问题标题】:Node error: SyntaxError: Unexpected token import节点错误:SyntaxError: Unexpected token import
【发布时间】:2016-10-04 16:33:38
【问题描述】:

我不明白出了什么问题。我检查了其他论坛谈论转译和通天塔。我该怎么办?

node -v
v5.5.0

我的代码:

import recast from 'recastai'

还有错误

(function (exports, require, module, __filename, __dirname) { import recast from 'module1'
                                                              ^^^^^^

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:139:18)
    at node.js:999:3

【问题讨论】:

标签: node.js babeljs


【解决方案1】:

ES6 导入是最近引入的功能,当前稳定版本的 Node 还不支持它们。 Node.js 问题跟踪器为此提供了 open issue - 但在 V8 和 Node 添加对此功能的支持之前,您将需要使用转译器(最流行的是 babel)才能使用导入。

为了快速尝试转译,babel 提供了一个基于 Web 的 REPL。 This one 演示您的代码正在被转译。

babel project homepage 指向开始使用 Babel 并将其与您的开发工作流程集成的相关资源。

对于最简单的设置,请访问此setup page 并在 Babel 内置部分中选择 CLI。

这基本上涉及三个简单的步骤:

  1. 安装 babel-cli : npm install --save-dev babel-cli babel-preset-es2015
  2. 创建.babelrc配置文件:echo '{ "presets": ["es2015"] }' > .babelrc
  3. 使用已安装的模块转译您的源代码:./node_modules/.bin/babel src -d lib

上述设置页面还说明了如何添加 npm 脚本以简化最后一步。或者,您可以将 babel 与您的编辑器或构建链集成,以便您的文件在更改时自动编译。

【讨论】:

  • 另外,需要:npm install babel-preset-es2015
【解决方案2】:

如果你不想处理 babel。这个对我有用。

const calc = require('./my_calc');
let {add, multiply} = calc;

【讨论】:

    【解决方案3】:

    1) 安装最新的预设

    yarn add --dev babel-preset-latest
    

    2) 创建.babelrc 并添加以下内容

    {
        "presets": ["latest"]
    }
    

    3) 运行你的脚本

    npx babel-node yourscript.js
    

    或者在你的package.json文件中添加

    "scripts": {
      "start": "babel-node index.js"
    }
    

    【讨论】:

      【解决方案4】:

      开始

      首先我们要安装 babel-cli。

      $ npm install --save-dev babel-cli
      

      还有一些预设。

      $ npm install --save-dev babel-preset-es2015 babel-preset-stage-2
      

      package.json:

        "scripts": {
          "start": "babel-node index.js --presets es2015,stage-2"
        }
      

      运行:

      $ npm start
      

      使用 nodemon 观察文件更改:

      我们可以使用 nodemon 改进我们的 npm start 脚本。

      $ npm install --save-dev nodemon
      

      然后我们可以更新我们的 npm 启动脚本。

      package.json:

       "scripts": {
         "start": "nodemon index.js --exec babel-node --presets es2015,stage-2"
        }
      

      运行:

      $ npm start 
      

      如果您使用的是 pm2,请按照以下步骤操作:

      $ pm2 start app.js --interpreter babel-node
      

      【讨论】:

        【解决方案5】:

        解决这个问题很简单,import是ES6语法,Node难以支持,需要添加Babel作为转译器,进入package.json添加如下

        在运行JS代码进行转译时,首先添加一个脚本标签以使用babel。

        "scripts": {
            "start": "nodemon ./app.js --exec babel-node -e js"
          }
        

        然后将以下内容添加为 Babel devDependencies

        "devDependencies": {
            "babel-cli": "^6.26.0",
            "babel-preset-es2015": "^6.24.1",
            "babel-preset-stage-0": "^6.24.1"
          }
        

        之后还需要配置babel presets文件,因此在根目录下创建.babelrc文件,并定义如下presets

        {
          "presets": [
            "es2015",
            "stage-0"
          ]
        }
        

        最后别忘了npm install

        【讨论】:

          【解决方案6】:

          感谢NodeJS enhancement proposal,我们有了前进的道路。你可以使用@standard-things/esm

          找到announcement here 只需运行

          npm i --save @std/esm
          

          今天在您的包装中。

          【讨论】:

            猜你喜欢
            • 2017-12-30
            • 2017-01-24
            • 2023-04-11
            • 1970-01-01
            • 2018-11-29
            • 1970-01-01
            • 2017-09-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多