Quando o Webpack agrupa seus módulos, ele segue a cadeia de dependências do módulo que você importou (ou exigiu) e puxa todas as suas dependências e também as agrupa até o final da cadeia.
Se houver um arquivo que não saiba como carregar nessa cadeia de dependências, esse tipo de erro será lançado.
Isso às vezes pode ser resolvido adicionando um carregador que saiba como carregar esse tipo de dependência. Se, no entanto, a dependência for um módulo não nativo, o Webpack não poderá carregá-lo. Alguns dos carregadores sabem como carregar módulos com dependências não nativas stubbing e excluindo a parte não nativa para que ela seja carregada. No
fs
módulo, por exemplo, você não precisa ser capaz de ler e gravar arquivos do disco porque o navegador não pode fazer isso, então não há necessidade de incluir essa parte. Isso levanta a questão:Qual funcionalidade do módulo mangusto você precisa no navegador? Você pode incluir apenas essa funcionalidade e não todo o módulo mangusto?
Se você conseguir fazer isso, poderá resolver 2 problemas:
- Você pode resolver o problema de agrupamento do Webpack porque a parte do mangusto que você está incluindo em seu projeto não tem subdependências problemáticas.
- Você criará um pacote menor com o Webpack porque incluirá apenas as partes necessárias para que a carga útil do bundle.js para o cliente seja muito menor.
Como exemplo, recentemente precisei usar o gerador Mongodb ObjectId no cliente. Descobri que o Webpack não conseguiu lidar com o
import mongodb from 'mongodb'
componente, cavando nas dependências, descobri que mongodb
depende de mongodb-core
que depende de bson
que tem o ObjectId
método que eu precisava. Importando apenas o
bson
componente dessa cadeia de dependências, contornei o problema do Webpack e tornei meu pacote muito menor. Se você estiver usando o Npm 3, há uma boa chance de que
bson
está instalado na raiz de node_modules
se você já estiver usando mongoose ou mongodb, então você pode import
sem colocar uma referência explícita a ele em seu package.json
. Isso obviamente acarreta o risco de que, se a dependência superior parar de depender dela, sua compilação será interrompida e você precisará npm install
isso de forma independente. A vantagem de usar essa abordagem é que você sempre usará a mesma versão do bson
que a dependência superior está usando, o que pode ser importante.