Webpack использует Object.assign в выходной libraryTarget - PullRequest
0 голосов
/ 22 февраля 2019

Я использую веб-пакет, чтобы отдельно связать несколько библиотек.Я хочу использовать пространства имен в TypeScript для организации кода на объекте окна в браузере.Например:

account.form.ts

export namespace Account.Form {
  export function onLoad() {
    // my code
  }
} 

account.ribbon.ts

export namespace Account.Ribbon {
  export function onLoad() {
    // my code that is different but with the same function name
  }
} 

Эти файлы могут быть одновременно загружены на заданную страницу, но сТак как webpack назначает объекты объекту window, то первая из них перезаписывает вторую.Например, если «account.ribbon.ts» выполняется после «account.form.ts», то будет доступен только модуль, определенный в «account.ribbon.ts», поскольку «account.form.ts» будет перезаписан,

Следующий код находится в обоих наборах:

(function(e, a) { for(var i in a) e[i] = a[i]; }(window, /******/ (function(modules) { // webpackBootstrap
//...

Я хотел бы увидеть следующее: использовать Object.assign вместо перезаписи ссылки на объект окна.

(function(e, a) { for(var i in a) Object.assign(e[i] = e[i] || {}, a[i]); }(window, /******/ (function(modules) { // webpackBootstrap

Есть ли способ сделать это с помощью веб-пакета?Ниже приведена конфигурация вывода в webpack.config.js.

//...
output: {
  filename: "[name].js",
  path: path.resolve(`../web-resources/${distRelativeDir}`),
  libraryTarget: "window"
},
//...

1 Ответ

0 голосов
/ 22 февраля 2019

Это может быть, если ваша цель es6.В противном случае Object.assign не будет работать, поскольку он не поддерживается в более ранних версиях (поэтому он не будет работать в IE, веб-браузере Android ...).

Вы можете сослаться на него здесь

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