Tengo foo de la biblioteca JS que se está compilando con un paquete web que incluye y compila el código fuente de la biblioteca Phaser 3. Phaser 3 usa el complemento de definición para excluir partes de sí mismo, por ejemplo, reemplazando "typeof CANVAS_RENDERER" con false.
El problema con el que me encuentro es este. cuando incluyo este bloque en la configuración de mi paquete web
new webpack.DefinePlugin({ "typeof CANVAS_RENDERER": JSON.stringify(false), }),el tipo de salida que obtengo es este
if (typeof WEBGL_RENDERER && typeof CANVAS_RENDERER) {} if (typeof WEBGL_RENDERER && !typeof CANVAS_RENDERER) { WebGLRenderer = __webpack_require__(/*! ../renderer/webgl/WebGLRenderer */ "../node_modules/phaser/src/renderer/webgl/WebGLRenderer.js"); // Force the type to WebGL, regardless what was requested config.renderType = CONST.WEBGL; game.renderer = new WebGLRenderer(game); } Donde typeof CANVAS_RENDERER obviamente se evaluó como falso y, como resultado, el cuerpo de la función se optimizó, pero no reemplazó la declaración original, lo que provocó que el código siguiera la ruta vacía cuando se ejecuta.
Parece que, si el complemento no puede resolver cada parte de la cláusula if , en su caso typeof WEBGL_RENDERER (ya que esto no está definido en el new webpack.DefinePlugin ), no resuelve el resto.
En otras palabras, si define ambos en el complemento, debería funcionar:
new webpack.DefinePlugin({ "typeof CANVAS_RENDERER": JSON.stringify(false), "typeof WEBGL_RENDERER": JSON.stringify(true), }),Al menos eso resolvió el problema descrito, en mi configuración de prueba.