Как импортировать модуль JS UMD с помощью веб-пакета Laravel Mix

#javascript #laravel #webpack #laravel-mix #umd

Вопрос:

У меня есть плагин JS со следующей структурой :

 (function(global, factory) {
    typeof exports === 'object' amp;amp; typeof module !== 'undefined' ? module.exports = factory() :
        typeof define === 'function' amp;amp; define.amd ? define(factory) :
        (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.myPlugin = factory());
}(this, function() {
    'use strict';

    /**/
    const myPlugin = (function(options) {
        const api = {};
        return api;
    });

    return myPlugin ;
}));
 

Я пытаюсь загрузить этот плагин внутри app.js файл, созданный Laravel mix.
Для этого в app.js У меня есть следующее :

 try {
    window.myPlugin = require('./app/plugins/myplugin.js');
} catch (e) {}
 

Теперь файл фактически импортирован внутрь app.js, но когда я пытаюсь использовать myPlugin в другом файле JS, я получаю ошибку myPlugin is not a function

 const pluginVar = myPlugin(options);
//myPlugin is not a function
 

Если я попытаюсь console.log(typeof myPlugin) , то получу Object .

Ответ №1:

Решение было довольно простым :

 try {
    require('./app/plugins/myplugin.js');
} catch (e) {}
 

Я предполагаю, потому что код плагина уже был назначен окну внутри функции(глобальной, заводской) iife.