Я використовую Webpack у своїй програмі, в якій створюю дві точки входу - bundle.js для всіх моїх файлів / кодів JavaScript та vendors.js для всіх бібліотек, таких як jQuery та React. Що робити для використання плагінів, у яких залежність jQuery має, і я хочу їх мати також у vendors.js? Що робити, якщо ці плагіни мають декілька залежностей?
На даний момент я намагаюся тут використовувати цей плагін jQuery - https://github.com/mbklein/jquery-elastic . У документації на Webpack згадується плагін та завантажувач імпорту. Я використовував providePlugin, але все ще об’єкт jQuery недоступний. Ось як виглядає мій webpack.config.js-
var webpack = require('webpack');
var bower_dir = __dirname + '/bower_components';
var node_dir = __dirname + '/node_modules';
var lib_dir = __dirname + '/public/js/libs';
var config = {
addVendor: function (name, path) {
this.resolve.alias[name] = path;
this.module.noParse.push(new RegExp(path));
},
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jquery: "jQuery",
"window.jQuery": "jquery"
}),
new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js', Infinity)
],
entry: {
app: ['./public/js/main.js'],
vendors: ['react','jquery']
},
resolve: {
alias: {
'jquery': node_dir + '/jquery/dist/jquery.js',
'jquery.elastic': lib_dir + '/jquery.elastic.source.js'
}
},
output: {
path: './public/js',
filename: 'bundle.js'
},
module: {
loaders: [
{ test: /\.js$/, loader: 'jsx-loader' },
{ test: /\.jquery.elastic.js$/, loader: 'imports-loader' }
]
}
};
config.addVendor('react', bower_dir + '/react/react.min.js');
config.addVendor('jquery', node_dir + '/jquery/dist/jquery.js');
config.addVendor('jquery.elastic', lib_dir +'/jquery.elastic.source.js');
module.exports = config;
Але, незважаючи на це, він все ще видає помилку в консолі браузера:
Uncaught ReferenceError: jQuery не визначено
Так само, коли я використовую навантажувач імпорту, він видає помилку,
вимагати не визначено "
у цьому рядку:
var jQuery = require("jquery")
Однак я міг би використовувати той самий плагін, коли не додаю його до файлу vendors.js, а замість цього вимагаю його звичайним способом AMD, як я включаю інші файли коду JavaScript, як-от
define(
[
'jquery',
'react',
'../../common-functions',
'../../libs/jquery.elastic.source'
],function($,React,commonFunctions){
$("#myInput").elastic() //It works
});
Але це не те, що я хочу робити, оскільки це означатиме, що jquery.elastic.source.js постачається разом із моїм кодом JavaScript у bundle.js, і я хочу, щоб усі мої плагіни jQuery знаходились у пакеті vendors.js. Тож як я можу досягти цього?