2016-11-20 66 views
1
  1. 導入ES6 NPM模塊時,我創建使用meteor create
  2. 我跑npm install -S spacy-nlp一個新流星的項目,其中包含一些ES6代碼
  3. 在我server/main.js,我寫import spacy from 'spacy-nlp'
  4. 在運行meteor,它抱怨Error: The babel-runtime npm package could not be found in your node_modules. Please run the following command to install it: meteor npm install --save babel-runtime
  5. 我安裝babel-runtime
  6. 然後它抱怨的SyntaxError流星

    W20161120-16:40:30.175(8)? (STDERR) /Users/prashanthcr/code/es6-meteor-test/node_modules/spacy-nlp/src/start-io.js:3 
    W20161120-16:40:30.176(8)? (STDERR) const { spawn } = require('child_process') 
    W20161120-16:40:30.176(8)? (STDERR)  ^
    W20161120-16:40:30.177(8)? (STDERR) 
    W20161120-16:40:30.178(8)? (STDERR) SyntaxError: Unexpected token { 
    

不知道從哪裏裏去。爲什麼我無法導入使用ES6的npm軟件包?

我在全球安裝了Node.js 7.1.0,我使用的是Meteor 1.4.2.3。

回答

1

流星不編譯任何文件node_modules到ES5。這意味着代碼運行不變。這就是在運行時而不是在構建過程中得到錯誤的原因。

Meteor v1.4.2.x使用節點v4.6.2(您可以使用meteor node --version檢查節點版本)。

此版本的節點通常不支持解構賦值(const {foo} = ...語法)。這需要使用--harmony_destructuring標誌。通過運行版本爲4.x和6.x的節點外殼(REPL),可以輕鬆地測試此操作。

鍵入3的終端會話的情況如下:

  • $ meteor node
  • $ meteor node --harmony_destructuring
  • $ node,當節點是在V6 +

代碼:

let bar =() => ({foo: 3}); // 1 
let { foo } = bar(); // 2 
eval("let { foo } = bar();"); // 3 
  • 聲明1將正常運行。
  • 聲明2將不會被節點v4識別(期望更多的用戶輸入),並且將按照預期由具有該標誌的節點v6和v4評估。
  • 聲明3強制節點將表達式作爲一個單位進行計算,而不需要用戶進一步輸入,因此它會導致節點v4拋出所看到的錯誤並且將由節點v6和v4正確評估w/flag 。

這意味着,你所面對的錯誤是一個節點的問題,您需要:

  • 找到一種方式來獲得流星與--harmony_destructuring標誌運行節點。
  • 分叉包並更改有問題的表達式。
  • 分叉並向軟件包添加構建配置(例如,預發佈步驟)。
  • 等待Meteor開始使用Node v6(應該很快就會發生,因爲它現在是穩定的LTS版本)。