Подтвердить что ты не робот

Целевая задача универсальной библиотеки Webpack 4

Согласно документации Webpack 4, если я укажу libraryTarget: 'umd', это должно привести к следующему результату:

(function webpackUniversalModuleDefinition(root, factory) {
  if(typeof exports === 'object' && typeof module === 'object')
    module.exports = factory();
  else if(typeof define === 'function' && define.amd)
    define([], factory);
  else if(typeof exports === 'object')
    exports["MyLibrary"] = factory();
  else
    root["MyLibrary"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
  return _entry_return_;
});

Однако я получаю:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory();
    else if(typeof define === 'function' && define.amd)
        define("lib", [], factory);
    else if(typeof exports === 'object')
        exports["lib"] = factory();
    else
        root["lib"] = factory();
})(window, function() {
return

Точнее, вместо этого
(typeof self !== 'undefined'? self: this, function()
Я получаю это:
(window, function()

Это (очевидно) приводит к тому, что window is undefined ошибки времени выполнения window is undefined при импорте в среде узла.

Чтобы быть ясным:
Я знаю, что window не существует в узловых приложениях. Мой вопрос не в этом, а скорее о webpack.

Это ошибка, или я чего-то не хватает?

Моя конфигурация вывода:

output: {
    path: resolve(__dirname, 'umd'),
    filename: 'lib.js',
    libraryTarget: 'umd',
    library: 'lib',
    umdNamedDefine: true,
},
4b9b3361

Ответ 1

Это было бы ошибкой в Webpack 4.
Webpack 3 производит правильную связку.

Эта проблема должна быть исправлена с помощью этой функции, пока не будет предложено обходное решение, использующее globalObject:

output: {
    path: resolve(__dirname, 'umd'),
    filename: 'lib.js',
    libraryTarget: 'umd',
    library: 'lib',
    umdNamedDefine: true,
    globalObject: '(typeof self !== 'undefined' ? self : this)'
},