Как я могу загрузить "jquery-1.4.2" как модуль в веб-пакете без изменения его источника

Я хочу включить jquery-1.4.2 параллельно с jquery-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?

1 ответ

Решение

Я создал репо, который демонстрирует это

Установка: 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$/
                },  

Я добавил также resol.alias для моего плагина jQuery:

 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();

Результат: все зеленое:-)

Другие вопросы по тегам