2016-11-22 2 views
1

私はwebpack 1.13.3を使用しています。_webpack_require空のモジュールオブジェクトを返します

_webpack_require空のモジュールオブジェクトを返します。 期待される結果は 'a.js' モジュールオブジェクトである..

ソースコード:

a.js

require.ensure([], function() { 

    var module = {}; 

    module.init = function() { 
    console.log('a'); 
    }; 

    return module; 
}) 

entry.js

require([], function() { 
    console.log(require('./a')) 
    require('./a').init(); 
}) 

index.htmlを

<script type="text/javascript" charset="utf-8" src="./main.js"> 
</script> 

webpa ck.config.js

module.exports = { 
    entry: './entry.js', 
    output: { 
    filename: '[name].js' 
    } 
} 

webpack.config.jsでビルドし、ブラウザでindex.htmlを開きます。 エラーが表示されます。

はconsole.log((「./ A」が必要です))このコードのログだけで空のオブジェクト 『{}』

答えて

2

私はあなたがWebPACKのとAMDモジュールを使用しようとしていると思いますが、あなたがオフにはるかに優れています単にCommonJSモジュールスタイルを使用します。それはウェブパックのために作られたもので、とてもシンプルで美しく動作します!

は、代わりに次のことを試してみてください。

a.js

module.exports = {}; // module.exports is what will be returned if you require() this file. 

module.exports.init = function() { 
    console.log('a'); 
} 

// OR 

module.exports = { 
    init: function() { 
    console.log('a'); 
    }, 
}; 

entry.js

require('./a').init(); 

あなたのWebPACKの設定とHTMLの変更は必要ありません。

ご覧のとおり、はるかに簡単です! Webpackは自動的にそれらのモジュールを関数でラップし、何もグローバルにリークされません。

+0

実際、私のレガシーコードはAMDを使用しています。私はAMDスタイルを使用しました。しかしthx! –

+1

@mJane、webpackでは、AMDの代わりにAMDを使用できますが、AMDで変数をエクスポートする方法はありません。 – Ambroos

関連する問題