2015-05-14 38 views
18

我正在寫一個 「階級」 在節點如何執行與ES5和ES6兼容的導出?

// mymodule/index.js 

function MyClass() {} 
MyClass.prototype.method1 = function() {..} 

通常我做

module.exports = MyClass 

,但我想都可以使用語法

var MyClass = require('mymodule') 

import {MyClass} from 'mymodule' 
我的課

這是正確的方法嗎?

+0

看看巴貝爾如何處理這樣的:http://babeljs.io/docs/usage/modules /#interop – Wildhoney

+2

爲什麼要從'mymodule'中導入{MyClass}而不是從'mymodule'中導入MyClass? var myClass = require('mymodule')'相當於'mymodule'中的import myClass,'mymodule'中的import myClass相當於'var MyClass = require('mymodule')。MyClass'。雖然你當然可以實現你想要的,但問題在於它是否合理。 –

+2

您可能是指如何執行兼容CommonJS和ES6的Harmony的導出。 –

回答

0

從評論中,我明白你正試圖在節點中的一些摩卡單元測試中運行你的ES6前端代碼。是的,直到節點支持ES6模塊時才能這樣做。如果我是你,我會使用systemjs加載這些摩卡測試的代碼。摩卡支持承諾,因此在測試之前加載任何文件應該相當輕鬆。

兩者的寫入語法只會爲您創建更多問題。

0

兩種方式都是正確的,但儘量在這樣ES6導入去掉括號:

import MyClass from 'mymodule' 

否則,你就必須導出函數是這樣的:

module.exports.MyClass = MyClass 

,比導入像這樣:

import { MyClass } from 'mymodule' 
+3

這與OP要求的es5不兼容。 – Jim

+0

@Jim問題是如何使es5與es6兼容。 我的回答只是指出了代碼 中的一個錯誤,以及如何解決它。這不僅僅是es6代碼,列表2解釋瞭如何調整es5代碼,而列表1則告訴如何調整es6代碼,以解決整個問題。 –

4

就寫出兼容ES5和ES6的導出而言,Bab埃爾已經爲你照顧。 (如在評論你的問題溝通。我只是澄清那些誰得到的對話框中丟失。)

module.exports = MyClass 

既要對付var MyClass = require('mymodule')import MyClass from 'mymodule

不過工作,要明確,實際的語法,你問:

import {MyClass} from 'mymodule' 

意味着不同

import MyClass from 'mymodule' 
東西

對於後者,則必須將其導出爲:module.exports.MyClass = MyClass,和ES5模塊它必須需要作爲var MyClass = require('mymodule').MyClass