我刚开始在现有的应用程序中试验Webpacker。
从我读过的所有内容中,我的理解是Webpacker和Sprockets可以共存,并且在Webpacker中编译的库(例如,jquery)可以通过全局变量提供给Sprokets。
但我在资产管道中的所有jquery都在提高ReferenceError: Can't find variable: $
我误解了,或者我的代码中是否有错误?
我添加了jquery
yarn add jquery
并在environment.js中分配变量
const { environment } = require('@rails/webpacker');
const webpack = require('webpack');
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
}));
module.exports = environment;
这工作:
#javascript/packs/application.js
$(function () {
console.log('Hello World from Webpacker via JQUERY');
});
这不
#assets/javascripts/application.js
$(function () {
console.log('Hello World from Sprockets via JQUERY');
});
# ReferenceError: Can't find variable: $
预期的行为是什么?
最后,从webpacker中将jQuery暴露给全局变得相对容易。但是找到关于如何做到这一点的文档非常困难!希望这可以节省别人的搜索。
添加expose-loader
yarn add expose-loader -D
然后将以下配置添加到config / webpack / environment.js
environment.loaders.append('expose', {
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: '$'
}, {
loader: 'expose-loader',
options: 'jQuery',
}]
})
然后我能够从资产管道中删除jquery,重新启动服务器,并且链轮内的所有剩余jquery函数继续按预期运行。