【问题标题】:How can I load "jquery-1.4.2" as a module in webpack without modifying its source如何在不修改其源代码的情况下将“jquery-1.4.2”作为 webpack 中的模块加载
【发布时间】:2018-08-23 08:54:30
【问题描述】:

我想同时包含jquery-1.4.2jquery-3.x。 我将两个脚本的路径别名为:jquery1/jquery3

对于 jquery-3.x,以下代码有效:

require("imports-loader?jQuery=jquery3!app/some.jquery.myplugin");

但是如果我对 jquery1 做同样的事情:

require("imports-loader?jQuery=jquery1!app/some.jquery.mylegacyplugin");

我在运行时得到:无法设置未定义的属性 mylegacyplugin。

到目前为止,我发现的唯一解决方案是编辑 jquery-1.4.2。文件并在函数末尾添加以下内容:

module.exports=jQuery;

有没有一个加载器可以用来避免编辑jquery的源代码?

【问题讨论】:

  • 你的jQuery插件是一个模块还是一个简单的脚本?

标签: jquery webpack webpack-3 webpack-loader


【解决方案1】:

我创建了一个 repo 来演示它

安装:npm i exports-loader -D。 我看到你已经安装了imports-loader

我希望你可以修改你的插件添加module.exports

myJQueryPlugin.js

$.fn.greenify = function () {
    debugger;
    this.css("color", "green");
    return this;
}

module.exports = $;

添加以下规则:

 module: {
            rules: [        
                {
                    use: "exports-loader?window['jQuery']",
                    test: /jQuery.1.4.2.js$/
                },  

我还为我的 jQuery 插件添加了一个 resolve.alias:

 resolve: {
      alias: { // shortcuts             
            "myjqPlugin": path.resolve("src/scripts/plugins/app/myJQueryPlugin.js")),

然后在你的 index.js 中

// you would probably name this `var` differently:
    var my142jQueryIncludingPlugin = require("imports-loader?$=../../libs/jQuery.1.4.2.js!myjqPlugin");

    my142jQueryIncludingPlugin("*").greenify();

结果:一切都是绿色的:-)

【讨论】:

  • 不错!我不知道你也可以导出窗口上的东西!
  • 您将exports-loader 用于不导出自身的脚本。这个旧的 jQuery 版本不使用任何模块格式来导出自己,它只是全局注册自己。这就是为什么我们需要exports-loader here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多