NodeJS:尝试导入模块时出现“意外标识符”

时间:2019-04-20 04:08:12

标签: node.js ecmascript-6 es6-modules

我正在尝试在Node v10.15.3 LTS中使用ES6导入,但是我一直遇到相同的语法错误。无论我使用esm,babel还是--experimental-modules标志来启用对ES6导入的支持,这种情况都会发生。这是错误消息:

/home/derrick/demo/index.js:1
(function (exports, require, module, __filename, __dirname) { import otherFunction from './otherFunction';
                                                                     ^^^^^^^^^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)

这是我的代码(使用esm):

package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "esm": "^3.2.22"
  }
}

index.js

import otherFunction from './otherFunction';

otherFunction.js

const otherFunction => {
    console.log('Inside other function');
}
export default otherFunction;

我已经完成了几十个教程,试图弄清楚这一点,但是我仍然收到相同的错误消息。

我已经阅读了导入/导出的语法。我还尝试导入{otherFunction}而不是otherFunction,将文件扩展名更改为.mjs,将其命名为vs. default export,以及在我搜索此错误消息时可以找到的其他任何内容。

我非常感谢您的任何建议。我已经花了8个小时在这上面了,快要尖叫了:-)

2 个答案:

答案 0 :(得分:0)

由于node.js仍使用common.js模块系统,因此必须进行转译以使用es6语法。

要轻松运行es6 javascript文件,您可以安装babel-cli并使用babel-node命令运行它,如下所示。

npm install -g babel-cli

babel-node index.js

答案 1 :(得分:0)

我终于按照https://hackernoon.com/using-babel-7-with-node-7e401bc28b04上的说明与Babel 7一起使用了。这是基本步骤:

  • npm init -y
  • npm install --save-dev @ babel / core @ babel / cli @ babel / preset-env @ babel / node
  • npm install --save-dev nodemon
  • 编辑.babelrc并将其更改为{ "presets": ["@babel/preset-env"] }
  • nodemon --exec babel-node index.js