私の目標は、Webpackを使用して、分離されたコンポーネントを想定されたグローバルオブジェクトにエクスポートすることです。
<script>
var MyApp = window.MyApp || {};
MyApp.something = MyApp.something || {};
</script>
<script src="my-isolated-module.js"></script>
//
// other modules/components loaded here...
//
<script>
MyApp.something.myIsolatedModule.run();
</script>
上記の例では、他のモジュールがアタッチされるプロパティsomething
を持つグローバルオブジェクト/モジュールがあると想定しています。そのため、MyApp
またはMyApp.something
を破壊せずに、分離したモジュールをグローバルMyApp.something
オブジェクトにアタッチしたいと思います。
var webpack = require('webpack');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
module.exports = {
target: 'web',
context: __dirname + '/src/',
entry: './main.jsx',
output: {
path: __dirname + '/dist/',
filename: 'app.bundle.js',
library: 'something',
libraryTarget: 'var'
},
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [
{test: /\.jsx$/, loader: '../node_modules/jsx-loader'}
]
},
externals: {
react: {
root: 'React',
commonjs: 'react',
commonjs2: 'react',
AMD: 'react'
}
},
plugins: [
new UglifyJsPlugin()
]
};
module.exports = {
myIsolatedModule: require('./MyIsolatedModule')
};
Webpackのoutput.libraryTarget
をすべての可能な値に設定してみました( http://webpack.github.io/docs/configuration.html#output-librarytarget を参照)。 output.library
という値を使用して、モジュールに直接名前空間を含めます。思い通りに動かない...
output.library
は、以下のような配列にすることができます。
output: {
library: ['MyApp', 'something']
}
これは、ウィンドウwindow.MyApp.something
にオブジェクトを作成するか、すでに存在する場合はwindow.MyApp
に追加します。