2017-04-20 51 views
0

我正在使用web pack打包庫。 我們有多個ES6類,以這種方式:如何區分Webpack中的私有類和公共類

/src/Lib.js

import HelperClass from './HelperClass.js'; 
class Lib { 
    method1() {...} 
} 

/src/HelperClass.js

class HelperClass { 
    doSth() {...} 
} 

包裝用的WebPack作品,我們最終得到一個包含Lib和HelperClass的文件lib.js,其格式爲var Lib = ...

如何使用webpack從全局名稱空間隱藏HelperClass(例如,使其成爲私有類)?

UPDATE:

現在我遇到的問題與導入助手類!我上傳了一個樣本項目https://github.com/benmarten/webpack_es6_test

這條線:

__WEBPACK_IMPORTED_MODULE_0__Helper_js___default.a.doSth(); 

結果:

[Error] TypeError: __WEBPACK_IMPORTED_MODULE_0__Helper_js___default.a.doSth is not a function. (In '__WEBPACK_IMPORTED_MODULE_0__Helper_js___default.a.doSth()', '__WEBPACK_IMPORTED_MODULE_0__Helper_js___default.a.doSth' is undefined) 
method1 (lib.js:92) 
Global Code (index.htm:6) 
+0

Webpack只顯示你從入口點輸出的內容,在你給出的例子中沒有輸出,因此沒有任何內容暴露。此外,你的'HelperClass.js'也不會導出任何東西,所以你不能在'Lib.js'中導入它。請提供[MCVE](https://stackoverflow.com/help/mcve)。 –

+0

gotya,讓我測試一下示例應用程序。 thx;) –

+0

更新,請看看,它只能工作一半.... –

回答

1

當創建具有的WebPack庫你暴露了在你的切入點出口的一切,一切是不能從外部訪問,但可以在代碼中使用它。如果您想使用其他文件中的任何內容,則仍然需要將其導出,因爲這些文件仍然是模塊。僅僅因爲有出口,並不意味着它變成了全球。只有在webpack.config.js中指定的條目中的出口將被暴露。

導出助手在HelperClass.js

class Helper { 
    static doSth() { 
    console.log('helper:doSth'); 
    } 
} 

export default Helper; 

然後將其導入Lib.js

import Helper from './HelperClass.js'; 

class Lib { 
    static method1() { 
    Helper.doSth(); 
    } 
} 

export default Lib; 

現在你捆綁的默認出口將是Lib類,你可以使用Helper裏面沒有揭露它。您也應該閱讀Authoring Libraries Guides

+0

謝謝,'出口默認助手;'解決了它。 現在唯一的問題是我只能用'lib.default.method1();'來訪問我的庫;但理想情況下我希望它是:'lib.method1();'任何想法? –

+0

不幸的是,Authoring Libraries Guide僅涵蓋了'export function'不導出es6類的情況;) –

+0

這幾乎是一回事,您可能想要閱讀[Exploring ES6 - ES6 modules的基本知識](http:// explorejs的.com/ES6/ch_modules。html#sec_basics-of-es6-modules)來理解模塊系統。另外這不是Java,不要在任何地方使用類。在大多數情況下,自由函數比靜態方法更合適。然後,您可以使用webpack文檔中的命名導出。但是如果你堅持使用類,你可以使用:'export const method1 = Lib.method1;',通過這種方式你將失去'this'的上下文,它等同於首先定義了一個常規函數。 –

相關問題