Tenho uma biblioteca Angular que contém vários componentes autônomos. Alguns desses componentes são dependentes de bibliotecas de terceiros (angular2-draggable, @fortawesome/angular-fontawesome, etc.). Meu objetivo é que eu possa usar essa biblioteca em um aplicativo, mas apenas adicionar dependências para os componentes que são realmente usados no aplicativo.
Por exemplo, a biblioteca tem componentes de
- Foo
- Barra (depende de angular2-draggable)
No aplicativo de consumo, se eu estiver usando apenas o componente Foo, então não quero ter uma dependência em angular2-draggable. Como posso fazer isso?
Parece que a abordagem correta é adicionar angular2-draggable como uma dependência de peer opcional, como em:
"sideEffects": false,
"peerDependencies": {
"angular2-draggable": "^16.0.0"
},
"peerDependenciesMeta": {
"angular2-draggable": {
"optional": true
}
}
A biblioteca será compilada e publicada perfeitamente. Tudo é instalado conforme o esperado no aplicativo consumidor. Mas ao iniciar o aplicativo, estou recebendo erros como:
Error: Module not found: Error: Can't resolve 'angular2-draggable'
Isso é verdade mesmo se Bar não for usado no aplicativo consumidor. Como posso garantir que apenas as dependências necessárias sejam necessárias?
Dependências opcionais só funcionam se você tiver vários pontos de entrada na sua biblioteca.
Se sua biblioteca tiver um arquivo barrel com Foo e Bar, ele realmente falhará como você viu.
A solução para você seria ter um ponto de entrada de biblioteca separado para
Bar