2016-11-09 62 views
0

這看起來很簡單,但我是一個node/javascript newbie。如何使用節點7.0.0從另一個文件導入類?如何在節點中導出類?

我定義在一個文件中我的課:

'use strict'; 

class MyClass { 
    ... 
}; 

module.exports = MyClass; 

而且我想在其他類中使用它:

var MyClass = require('./path/to/otherfile'); 
... 
var myclass = new MyClass(some param); 

但我發現了從我的棉短絨說

錯誤
TypeError: Class constructor MyClass cannot be invoked without 'new' 
+0

並且Node拋出一個錯誤?如果它只是棉絨,它有關係嗎? – adeneo

+0

您可能在代碼中的其他地方調用了'MyClass()'而沒有'new'關鍵字。 – madox2

+1

如果你做'module.exports.MyClass'它是否仍然顯示錯誤 – adeneo

回答

2

該代碼是正確的,可用於節點7.0.0。看到這個例子:

文件class.js

'use strict'; 
class MyClass { 
} 
module.exports = MyClass; 

文件code.js

var MyClass = require('./class.js'); 
var myclass = new MyClass(); 
console.log('OK'); 

運行:

node code.js 

,你會看到:

OK 

什麼是破碎不是你的代碼,但你的棉絨,但你不指定你使用什麼棉絨,所以很難再說什麼。

我不知道爲什麼人們認爲你應該使用的module.exports.MyClass = MyClass;代替module.exports = MyClass; - 它不僅沒有解決問題,但實際上會破壞代碼給你的一個錯誤:

TypeError: MyClass is not a constructor 

而且到人們推測這應該是使用:

SyntaxError: Unexpected token export 

export default MyClass; 

沒有,它會在節點7.0.0給出一個錯誤

閱讀了這個問題的評論後,我不知道有多少人真的在運行代碼,因爲事實證明代碼運行良好,但評論中的所有「解決方案」都會破壞它。

我與原來的代碼GitHub的項目,並建議對特拉維斯測試與節點版本4,5,6解決方案,和7。你可以在這裏看到:

與可用的測試結果:

當我知道哪個linter導致問題時,我會將其添加到項目中,我們將看到可以做些什麼。

+0

正如評論中所述,這個問題與linter沒有關係,而只與cucumber.js有關。我必須將外部類移動到黃瓜特性之外的另一個目錄中才能解決問題。這個響應確實回答瞭如何在node.js中導出類的問題 – Barodapride

相關問題