を使用する代わりに、モジュール名に直接 webpack をブラウザーに公開するにはどうすればよいModule.default
ですか?
これは、私が達成したいことをうまく表現できるように、簡単な方法でアプリをセットアップしたものです。
webpack.config.js
module.exports = {
entry: './src/app.js',
devtool: 'source-map',
output: {
path: './lib',
filename: 'app.js',
library: 'App',
libraryTarget: 'umd',
umdNamedDefine: true
},
module: {
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}]
}
};
.babelrc
{
"presets": ["es2015"],
"plugins": ["babel-plugin-add-module-exports"]
}
app.js
export default function main() {
console.log('The default function');
}
export function other() {
console.log('A random function');
}
出力の「ライブラリ」として「App」を指定したため、私のライブラリはブラウザで として利用できますApp
。
奇妙なことに...エクスポートされたデフォルトの関数を使用するには、私がしなければならないApp.default
. しかし、other
エクスポートされた関数を使用するには、次のようにしますApp.other
。App()
デフォルトのエクスポートされた関数を呼び出すことができると思いますが、もう一方は同じApp.other()
です。
これはブラウザでの標準的な動作ですか、それとも webpack を使用した UMD でラップされたライブラリですか? これは、lodash ライブラリの動作を模倣していないようです。私の構成は何らかの形でオフになっていますか?
しかし、ブラウザでlodashのライブラリ(レポ)を見てみると、それを実現していることが分かります。
Lodash は webpack を使用して構築されています。lodashのpackage.jsonの中を見てみると、メインファイルはlodash.js
. そのファイルを見ると、UMD でラップされているように見えます (ファイルの下部にある UMD 定義)。したがって、私が次のようなことをするとき:
import _ from 'lodash';
// or
import {clamp} from 'lodash';
すべて正常に動作します。
正常に動作するもう 1 つのことは、HTML ファイルでその正確なファイルを参照することです。
<script src="node_modules/lodash/lodash.js"></script>
これにより、lodash オブジェクトにアクセスできます。
console.log(_) // function
console.log(_.clamp) // function clamp(number, lower, upper) { ... }
どうすれば同じ動作を得ることができますか。Lodash の webpack 構成は必要以上に複雑で、リバース エンジニアリングに必要なものがわかりません。