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)).
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
}
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.