Разделение кода в Webpack с библиотекой Target
У меня есть веб-приложение, которое (на стороне клиента) Javascript написано в ES6 с основной точкой входа в app.js
,
Я могу связать его с помощью веб-пакета, либо ссылаться на внешние библиотеки поставщика, такие как jQuery, либо включать их в пакет - в зависимости от предпочтений. Для корректной работы в браузере необходимо указать libraryTarget
а также library
вот так:
//snip
entry: {
"app.bundle": ["./app.js"],
},
output: {
path: path.join(__dirname, "wwwroot\\js"),
filename: "[name].js",
libraryTarget: "var",
library: "app"
}
//snip
Тем не менее, я бы хотел, чтобы библиотеки моих поставщиков были упакованы отдельно.
Я могу сделать это с помощью CommonsChunkPlugin
, но тогда, похоже, не очень хорошо library*
свойства, как они применяются к нему, а также. то есть я в конечном итоге app.jQuery
вместо просто jQuery
Как я могу отделить код своего поставщика и предоставить соответствующие глобальные переменные для любых нужд, а также правильно отобразить код моего приложения в браузере?
webpack.config
Вот:
var path = require('path'),
webpack = require('webpack');
module.exports = {
context: path.join(__dirname, 'wwwroot'),
entry: {
"app.bundle": ['./js/app.js'],
"vendor.bundle": ['jquery', 'jquery-validation', 'jquery-validation-unobtrusive']
},
output: {
path: path.join(__dirname, 'wwwroot\\js'),
filename: '[name].js',
libraryTarget: 'var',
library: 'app'
},
module: {
loaders: [
{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'stage-0']
}
}
]
},
resolve: {
extensions: ['*', '.js']
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor.bundle',
minChunks: Infinity
}),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
}
1 ответ
Если ваши плагины jquery предоставляются извне и вы разрабатываете библиотеку, я бы предложил использовать externals
вместо ProvidePlugin
, Это означает, что вам придется явно указывать jQuery при тестировании вашей библиотеки.
внешность
externals: {
$: require.resolve('jquery'),
'window.$': require.resolve('jquery')
// ... and so on
}
И ваш index.html
где вы тестируете свою библиотеку, вы получите что-то вроде:
<script src='jquery.min.js'></script>
<script src='myLibrary.min.js'></script>