2017-04-20 32 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工作。 –