2017-04-20 31 views
3

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

ES6样式导入将无法在Node.js REPL上工作,我必须使用require来使用CommonJS样式导入。例如:我不能在节点提示符下输入import rxjs,而必须使用require('rxjs')。这使得将粘贴脚本复制到Node REPL中以快速测试它们变得困难,并且我必须首先将所有ES6样式导入转换为需要导入的导入,这违反了直觉。

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

像:

$ node
> import 'rxjs';
> import {map} from 'rxjs/operator/map';

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

回答

1

恐怕答案是或至少还不是。我们知道它将来会得到支持,但ES2015 importexport将不会用作CommonJS requiremodule.exports的原地替代。这只是因为他们的工作方式不同。您可以在this Node.js blog postthis SO question中找到更多信息。

你使用babel-node(现在被称为babel-cli)的想法没有那么糟糕:babel实现可互操作的require功能,这是一种可以获取专为两种类型的系统模块垫片。不幸的是,official website索赔缺乏支持在REPL此功能:

ES6-style module-loading may not function as expected

Due to technical limitations ES6-style module-loading is not fully supported in a babel-node REPL.

尽管如此,这个问题并不适用于生产代码,这不应该依赖于REPL反正。除了使用REPL,你可以考虑在含有babel-cli一个最基本的项目编写脚本,并且用于运行transpiled版本创建脚本:使用`通天-cli`似乎并不

{ 
    "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" 
    } 
} 
+0

该解决方案在产品中工作。我在导入行'import'rxjs';'处得到'SyntaxError:意外的令牌导入'。但是这回答了我是否有一种方法来处理REPL中的ES6进口问题。我希望Node.js在未来的版本中很快推出一个解决方案。 –

+0

@PranjalMittal我不知道'rxjs'是什么,但你必须把模块名称放在引号之间。然后你可能会把这个包里的所有东西放在名字空间里:'import * as rxks from'rxks''。但是,这还不足以让REPL工作。 –