Можно ли перезаписать «глобальную» переменную через Webpack? - PullRequest
0 голосов
/ 07 августа 2020

Я нахожу способ заставить MathJax работать в определенной c JS среде выполнения с множеством ограничений.

MathJax использует global для доступа к объекту MathJax, и это скомпилирован Webpack в следующий фрагмент:

function (e, t) {
  var n;
  n = function () {
    return this;
  }();
  try {
    n = n || new Function("return this")()
  } catch (e) {
    "object" == typeof window && (n = window)
  }
  e.exports = n
}

Приведенный выше код попытается назначить глобальный this на e.exports, а использование global в исходном коде MathJax будет заменено на e.exports. Однако в моей среде выполнения JS window / global недоступны, function () { return this; } возвращает undefined, new Function ограничено и возвращает только пустой объект вместо функции.

Мой вопрос в том, можно ли настроить Webpack для замены global какой-либо другой переменной, которую я указываю (например, limitedGlobal.someVar)?

Для справки, я обнаружил, что приведенный выше фрагмент определен в GlobalRuntimeModule. js, и я хочу изменить его реализацию.

1 Ответ

0 голосов
/ 07 августа 2020

Конечно, взгляните на globalObject

Его значение по умолчанию global="window"

Вы можете переопределить его следующим образом в конфигурациях вашего веб-пакета:

output: {
   globalObject: 'this' // or limitedGlobal.someVar in your case
}
...