Как упаковать модуль, завернутый в закрытие окна? - PullRequest
0 голосов
/ 18 января 2019

У меня есть какой-то сторонний код, который экспортируется с намерениями только для браузера. Он обернут в самопризывающуюся функцию, которая ожидает, что window будет передано.

(function (window) { "use strict";
   window['module'] = {}
})(window);

Есть ли лучшее название для описания этого модуля стиля?

Я хотел бы использовать веб-пакет для require или import этого кода.

в настоящее время используется webpack@3.5.1 Мне нужно это для работы в средах Node.js и ES6.

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Альтернативой попытке требовать / импортировать из окна является удаление его после деклараций импорта. Это дает вам ощущение импорта, не прыгая через обручи.

// Normal Imports
import Foo from "Foo";

// Globals from window
const {
  Bar
} = window;
0 голосов
/ 18 января 2019

Мне удалось добиться этого с помощью imports-loader и exports-loader

rules: [
  {
    test: /MyModule\.js/,
    use: [
      "imports-loader?window=>{}",
      "exports-loader?window.MyModule"
    ]
  },
0 голосов
/ 18 января 2019

Если автор не обновит свой код до UMD (или аналогичного), вы не сможете require / import it.

Я не могу придумать, как можно заставить это работать без модификации автора.

Хотя с помощью пакета окна вы можете использовать следующий прием:

//in a separate file
const Window = require("window");
const window = new Window();
global.window = window; //Try with and without this
require("my_module");
module.exports = window["module_global_variable_name"];

Но это сработало бы только в том случае, если автор не использовал другие глобальные переменные (например, fetch вместо window.fetch разрушил бы уловку).

...