私たちのライブラリの1つをwebpackを使用するように変換中です(ES5からES6にコードを移動していますが、まだES5サポートでライブラリを展開しています)。webpack 2でコンパイルするときに内部ライブラリをエクスポートする
ライブラリが内部にありません、それが使われている別のライブラリで、我々はこれを行うことができますので、現在私たちは、ソースでそれを展開:
const library = require('library');
const dataSource = require('library/src/datasources/fooSource');
しかし今、単一のファイルのエクスポートで、二行目をもはや働く私はresolve.modulesにフォルダを追加しようとしましたが、これは動作していません。
webpackの設定は、これと同じように見えますが、上記と同じことができる場合は(ただし、/src
部分を削除してください)
const path = require('path');
const webpack = require('webpack');
const packageJSON = require('./package.json');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const nodeExternals = require('webpack-node-externals');
module.exports = {
name: 'engine',
entry: {
'engine': ['babel-polyfill', './src/index.js'],
'engine-iframe': ['babel-polyfill', './src/index-iframe.js'],
},
target: 'web',
devtool: 'sourcemap',
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
resolve: {
extensions: ['.js'],
modules: [
'node_modules',
path.resolve(__dirname, 'src'),
path.resolve(__dirname, 'src/core'),
path.resolve(__dirname, 'src/datasource'),
path.resolve(__dirname, 'src/events'),
path.resolve(__dirname, 'src/plugins'),
path.resolve(__dirname, 'src/strategies'),
path.resolve(__dirname, 'src/util')
]
},
externals: [nodeExternals()],
plugins: [
new CleanWebpackPlugin('./dist'),
new webpack.BannerPlugin({
banner:
`/**
* ${packageJSON.name} - Copyright © ${new Date().getFullYear()}
* Version ${packageJSON.value}
* ${packageJSON.homepage}
*/
`,
raw: true,
entryOnly: false
}),
],
module: {
rules: [{
test: /\.js?$/,
exclude: /(node_modules)/,
loader: 'babel-loader',
options: {
cacheDirectory: true
}
}]
}
};
通常、あなたのライブラリはエンドユーザが使用できるいくつかのエンティティを公開していますので、メインライブラリのエントリポイントでexportという名前のES6としてそれらを再エクスポートし、それを使用するために 'export Lib、{DataSources} from ' -lib'' webpackの外部依存関係をカスタムメソッドでカスタマイズすることができます。コールバック関数で記述された 'external'セクションによって、要求されたモジュールコンテンツを非同期的に返すことができます –