Jsdom: "la solicitud de una dependencia es una expresión" (cuando se empaqueta con Webpack)

Creado en 24 nov. 2017  ·  5Comentarios  ·  Fuente: jsdom/jsdom

Información básica:

  • Versión de Node.js: 8.9.1
  • versión de jsdom

Al empaquetar mi aplicación de servidor (que internamente usa JSDOM) con el paquete web, recibo la siguiente advertencia:

WARNING in .../node_modules/jsdom/lib/jsdom/utils.js
    203:21-40 Critical dependency: the request of a dependency is an expression

El código en cuestión es:

["canvas", "canvas-prebuilt"].some(moduleName => {
  try {
    exports.Canvas = require(moduleName);

Si bien puede que no sea extremadamente común agrupar el código del servidor, me parece bastante agradable pasar de 266 MB ( src/ y node_modules/ ) a un solo archivo JS de 6 MB (en mi caso).

¿Consideraría reescribir la importación anterior para que sea siempre estática? ¿O ve esto como un déficit en el paquete que no puede detectar que en la práctica se podrían inferir los posibles módulos?

(Si se reescribiera en un if con parámetros require literales, es posible que los usuarios aún necesiten agregar una excepción ya que ni canvas ni canvas-prebuilt están disponibles de forma predeterminada , pero entonces al menos el problema se habría manejado explícitamente (y el usuario tendría que estar seguro de que no los está usando)).

Comentario más útil

¡actualizar! : manos_alzadas:

la solución es súper simple, y la obtuve de un problema de mocha-webpack : https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. También existe este documento https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md que recomienda el uso de este complemento.

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}

Todos 5 comentarios

No, lo siento, el paquete web no es compatible.

@domenic ¿

Porque no puede manejar los patrones de código que usa jsdom.

@domenic ¿qué tipo de patrones de código? webpack tiene una serie de lanzamientos todo el tiempo estos días, y hay una gran cantidad de complementos. Estoy seguro de que podemos encontrar algunas buenas prácticas para usar con webpack. :D

Ya uso jsdom con webpack, y mínimamente los métodos document / dom que estoy usando funcionan bien, acabo de llegar a este problema debido a la advertencia anterior. Solo lo noté ahora porque creo que mocha-webpack estaba suprimiendo la advertencia, y lo noté después de tirarlo. sin embargo, podría ser que mocha-webpack no esté suprimiendo nada y esté haciendo algo inteligente para manejar esto y podríamos usar esa mejor práctica.

¡actualizar! : manos_alzadas:

la solución es súper simple, y la obtuve de un problema de mocha-webpack : https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. También existe este documento https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md que recomienda el uso de este complemento.

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

kentmw picture kentmw  ·  3Comentarios

vsemozhetbyt picture vsemozhetbyt  ·  4Comentarios

Progyan1997 picture Progyan1997  ·  3Comentarios

domenic picture domenic  ·  3Comentarios

jacekpl picture jacekpl  ·  4Comentarios