2017-04-20 2 views
0

私はライブラリをパッケージ化するためにウェブパックを使用しています。 は、我々はこの方法で、複数のES6クラスを持っている:Webpackのプライベートクラスとパブリッククラスを区別する方法

/src/Lib.js

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

/src/HelperClass.js

WebPACKの作品と
class HelperClass { 
    doSth() {...} 
} 

包装、 LibとHelperClassを含むファイルlib.jsvar Lib = ...となってしまいます。

webpackを使用してHelperClassをグローバルな名前空間から非表示にするにはどうすればいいですか?

UPDATE:

は、今私はhelperClassのをインポートする際の問題に実行していますよ!あなたのエントリポイントでエクスポートされたすべてのものを公開WebPACKのでライブラリを作成する場合は、他のすべてがある

[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_IMPORTED_MODULE_0__Helper_js___default.a.doSth(); 

結果:私は、サンプルプロジェクトhttps://github.com/benmarten/webpack_es6_test

にこの行をアップロード外部からはアクセスできませんが、コード内で使用できます。別のファイルから何かを使用する場合は、ファイルがまだモジュールなので、ファイルをエクスポートする必要があります。輸出があるからといって、それがグローバルになるというわけではありません。 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

残念なことにオーサリングライブラリガイドでは、「エクスポート機能」がes6クラスをエクスポートしないケースのみを扱います) –

+0

文字通り同じことですが、「ES6モジュールの基礎」(http:// exploringjs .com/es6/ch_modules。html#sec_basics-of-es6-modules)を使用してモジュールシステムを理解してください。また、これはJavaではないので、どこでもクラスを使用しないでください。ほとんどの場合、フリー関数は静的メソッドよりもはるかに適切です。次に、webpackドキュメントのように名前付きエクスポートを使用できます。しかし、クラスの使用を主張するならば、 'export const method1 = Lib.method1;'を使うことができます。これは、 'this'のコンテキストを失う方法であり、最初は通常の関数を定義したのと同じです。 –

関連する問題