UMD модули в Chrome расширении - PullRequest
0 голосов
/ 23 апреля 2020

Определение модуля UMD примерно такое:

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['exports', 'b'], factory);
    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
        // CommonJS
        factory(exports, require('b'));
    } else {
        // Browser globals
        factory((root.commonJsStrict = {}), root.b);
    }
}(this, function (exports, b) {
    //use b in some fashion.

    // attach properties to the exports object to define
    // the exported module properties.
    exports.action = function () {};
}));

Проблема заключается в том, что Chrome Расширения не поддерживают ни один из следующих методов экспорта модуля:

  • define не существует
  • exports не существует
  • this не связано с window

По этой причине кажется, что модули UMD выходят из строя в Chrome средах расширения. Есть ли обходной путь, чтобы заставить модуль UMD правильно экспортировать в window объект в Chrome расширении?

1 Ответ

0 голосов
/ 23 апреля 2020

Как правильно указал @wOxxOm, среда расширений Chrome такая же, как в браузере, и this действительно привязана к window, поэтому модули UMD могут и должны работать с расширениями.

Оказывается, что настоящая проблема заключается в том, что babel производил пакет с this, замененным на undefined, что является проблемой, описанной и решенной в этой проблеме: Как остановить babel от переноса 'this' to ' undefined '(и вставка "использовать строгий") .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...