如何使用Webpacker为链轮提供jquery?

问题描述 投票:4回答:1

我刚开始在现有的应用程序中试验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: $

预期的行为是什么?

ruby-on-rails webpacker
1个回答
8
投票

最后,从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函数继续按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.