在Node.js REPL中导入ES6样式

Pra*_*tal 16 javascript node.js

来自Python背景并且是Node.js的新手,我发现使用Node.js REPL交互式尝试代码非常困难.我遇到的一个关键问题是imports:

ES6样式导入不适用于Node.js REPL,我必须使用CommonJS样式导入require.示例:我无法import rxjs在Node提示符处写入并且必须使用require('rxjs').这使得将粘贴脚本复制到Node REPL中以便快速测试它们变得更加困难,我必须首先将所有ES6样式的导入转换为需要导入的,这种导入感觉违反直觉.

有没有简单的方法可以使用Node.js REPL中的ES6样式导入?

喜欢:

$ node
> import'rxjs';
>从'rxjs/operator/map'导入{map};

我甚至试过babel-node哪个似乎不支持模块导入.

E_n*_*ate 7

我担心答案是否定的,或者至少还没有.我们知道,这将在未来得到支持,但ES2015 importexport不会充当就地换人CommonJS的requiremodule.exports.这只是因为它们的工作方式不同.您可以在此Node.js博客文章此SO问题中找到更多信息.

您使用--experimental-modules(现在称为babel-node)的想法并不是那么糟糕:babel-cli实现一个可互操作的babel函数,这是一种可以检索为任一类型系统设计的模块的垫片.不幸的是,官方网站声称在REPL中缺少对此功能的支持:

ES6样式的模块加载可能无法按预期运行

由于技术限制,在babel节点REPL中不完全支持ES6样式的模块加载.

尽管如此,这个问题并不适用于生产代码,而生产代码无论如何都不应该依赖于REPL.您可以考虑在包含的简单项目中编写脚本require,并创建用于运行转换版本的脚本,而不是使用REPL :

{
  "name": "my-test-chamber",
  "private": true,
  "scripts": {
    "build": "babel src/main.js -o lib/main.js",
    "start": "npm run build && node lib/main.js"
  },
  "dev-dependencies": {
    "babel-cli": "^6.0.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @aldel 虽然 Node.js 目前对 ESM 模块有实验性支持,但它们仍然无法在 REPL 上工作,即使使用 `--experimental-modules` 也是如此。尽管如此,我还是更新了答案。 (2认同)
  • 那么使用包有什么意义呢?或者更确切地说,既然我们可以使用包,那么我们实际上如何使用它们呢?如果导入不起作用,那么怎么办? (2认同)