Selon la documentation Webpack 4 , si je spécifie libraryTarget: 'umd' , cela devrait entraîner la sortie suivante:
(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_;
});
Cependant, ce que je reçois est:
(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
Pour être plus précis, au lieu de cela(typeof self !== 'undefined' ? self : this, function()
J'ai compris:(window, function()
Cela (évidemment) provoque une erreur d'exécution window is undefined
lors de l'importation dans un environnement de noeud.
Pour être clair:
Je sais que window
n'existe pas dans les applications de nœuds. Ma question ne concerne pas cela, mais plutôt webpack .
Est-ce un bug ou est-ce que je manque quelque chose?
Ma configuration de sortie:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
},
Ce serait un bug dans Webpack 4 .
Webpack 3 produit un ensemble approprié.
Ce problème devrait être résolu avec la fonction this , jusqu'à ce que la solution de contournement suggérée utilise globalObject
:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
globalObject: `(typeof self !== 'undefined' ? self : this)`
},