Node.js中的ES6样式导入REPL

时间:2017-04-20 22:22:48

标签: javascript node.js

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

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

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

像:

  

$ node
  > import' rxjs';
  >从' rxjs / operator / map';

导入{map}

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

1 个答案:

答案 0 :(得分:8)

我担心答案是 no ,或者至少尚未。我们知道将来会支持它,但ES2015 importexport不会作为CommonJS requiremodule.exports的就地替换。这只是因为他们不会以同样的方式工作。您可以在this Node.js blog postthis SO question中找到更多信息。特别是,人们已经可以在标志--experimental-modules(相关2ality blog post)下运行和导入Node.js中的标准模块。但是,此功能仍然无法在REPL中使用。

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

  

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

     

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

尽管如此,这个问题并不适用于生产代码,生产代码无论如何都不应该依赖于REPL。您可以考虑在包含babel-cli的简单项目中编写脚本,而不是使用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"
  }
}