Jsdom: "pedido de uma dependência é uma expressão" (ao empacotar com Webpack)

Criado em 24 nov. 2017  ·  5Comentários  ·  Fonte: jsdom/jsdom

Informação básica:

  • Versão Node.js: 8.9.1
  • versão jsdom: 11.4.0

Ao agrupar meu aplicativo de servidor (que usa JSDOM internamente) com o pacote da web, recebo o seguinte aviso:

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

O código em questão é:

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

Embora possa não ser extremamente comum agrupar o código do servidor, acho muito bom ir de 266 MB ( src/ e node_modules/ ) para um único arquivo JS de 6 MB (no meu caso).

Você consideraria reescrever a importação acima para ser sempre estática? Ou você vê isso como um déficit no bundler que ele não consegue detectar que na prática os módulos possíveis podem ser inferidos?

(Se fosse reescrito para if com parâmetros require literais, os usuários ainda poderiam precisar adicionar uma exceção, pois nem canvas nem canvas-prebuilt estão disponíveis por padrão , mas então, pelo menos, o problema teria sido explicitamente tratado (e o usuário teria que ter certeza de que não os está usando)).

Comentários muito úteis

atualizar! : raised_hands:

a correção é super simples, e eu obtive de um problema de mocha-webpack : https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. Também existe este documento https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md que recomenda o uso deste plugin.

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

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

Todos 5 comentários

Não, desculpe, webpack não é compatível.

@domenic Por que o webpack não é compatível? É de longe o empacotador mais popular.

Porque ele não pode lidar com padrões de código que jsdom usa.

@domenic que tipo de padrões de código? webpack tem uma enxurrada de lançamentos o tempo todo nos dias de hoje, e há uma infinidade de plug-ins. Tenho certeza que podemos sugerir algumas boas práticas para usar com o webpack. : D

Eu já uso jsdom com webpack e, no mínimo, os métodos document / dom que estou usando estão funcionando bem, só cheguei a esse problema por causa do aviso acima. Só percebi agora porque acho que mocha-webpack estava suprimindo o aviso, e percebi depois de jogá-lo fora. no entanto, pode ser que o mocha-webpack não esteja suprimindo nada e esteja fazendo algo inteligente para lidar com isso e poderíamos usar essa prática recomendada.

atualizar! : raised_hands:

a correção é super simples, e eu obtive de um problema de mocha-webpack : https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. Também existe este documento https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md que recomenda o uso deste plugin.

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

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

kentmw picture kentmw  ·  3Comentários

kilianc picture kilianc  ·  4Comentários

tolmasky picture tolmasky  ·  4Comentários

potapovDim picture potapovDim  ·  4Comentários

amfio picture amfio  ·  3Comentários