Saya menggunakan Webpack di aplikasi saya, di mana saya membuat dua titik masuk - bundle.js untuk semua file / kode JavaScript saya, dan vendor.js untuk semua perpustakaan seperti jQuery dan React. Apa yang harus saya lakukan untuk menggunakan plugin yang memiliki jQuery sebagai dependensinya dan saya ingin memilikinya juga di vendor.js? Bagaimana jika plugin tersebut memiliki banyak dependensi?
Saat ini saya mencoba menggunakan plugin jQuery ini di sini - https://github.com/mbklein/jquery-elastic . Dokumentasi Webpack menyebutkan Plugin dan import-loader. Saya menggunakan ProvidPlugin, tetapi masih objek jQuery tidak tersedia. Inilah tampilan webpack.config.js saya seperti-
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;
Namun terlepas dari ini, masih ada kesalahan di konsol browser:
ReferenceError Uncaught: jQuery tidak didefinisikan
Demikian pula, ketika saya menggunakan import-loader, ia melempar kesalahan,
membutuhkan tidak didefinisikan '
di baris ini:
var jQuery = require("jquery")
Namun, saya bisa menggunakan plugin yang sama ketika saya tidak menambahkannya ke file vendor.js saya dan sebaliknya membutuhkannya dengan cara AMD normal seperti cara saya memasukkan file kode JavaScript saya yang lain, seperti-
define(
[
'jquery',
'react',
'../../common-functions',
'../../libs/jquery.elastic.source'
],function($,React,commonFunctions){
$("#myInput").elastic() //It works
});
Tapi ini bukan yang ingin saya lakukan, karena ini berarti jquery.elastic.source.js dibundel bersama dengan kode JavaScript saya di bundle.js, dan saya ingin semua plugin jQuery saya ada di bundel vendor.js. Jadi bagaimana cara mencapai ini?