javascript - O Webpack não consegue importar pacote instalado a partir do git
Então eu dei um fork em um pacote no git. Fiz minhas alterações. Então, no meu terminal
npm install --save git+https://github.com/hayk94/ddp.js.git
E então eu tento importar o pacote no meu código assim
import DDP from 'ddp.js'
Mas o webpack me dá este erro
ERROR in ./main.js
Module not found: Error: Can't resolve 'ddp.js' in '/Users/hayksafaryan/projects/b2cEmbedLib'
@ ./main.js 23:11-28
@ multi (webpack)-dev-server/client?http://localhost:8080 babel-polyfill ./main.js
webpack: Failed to compile.
No entanto, o webpack funciona bem se eu instalar o pacote do npm. Eu importo o pacote como nos documentos, no entanto, talvez haja algum outro jeito para pacotes instalados do git?
Resposta #1
O ponto de entrada do pacote é lib/ddp.js, mas esse arquivo não existe no repositório. É muito comum que bibliotecas construam seus arquivos antes de publicar no npm, para que possam usar recursos mais recentes do JavaScript, mas ainda fornecer suporte para versões mais antigas que não os suportam. Isso é feito com o gancho prepublish, que é executado automaticamente antes de o pacote ser publicado (quando você executa npm publish). Com isso, os arquivos construídos não acabam no repositório, pois isso apenas atrapalharia seus commits. Algumas pessoas decidem adicioná-los ao repositório para que possam usá-los diretamente de lá, o que se tornou bastante raro porque esses casos de uso geralmente são cobertos por serviços como o Unpkg.
Você tem várias possibilidades de usá-lo a partir de um repositório git.
- Verifique nos arquivos compilados.
- Construa os arquivos após a instalação. Seja manualmente ou com um hook
postinstall. (não recomendado) - Altere o ponto de entrada para
src/ddp.js. Se você precisar transpilar os arquivos, esta não é uma opção válida, mesmo que você teoricamente pudesse colocar o pacote na lista de permissões na sua configuração do webpack, para que ele fosse transpilado (assumindo que você estivesse excluindonode_modulesde serem transpilados). - Publique o pacote no npm sob seu namespace (
@seunomeusuario/ddp.js) e use-o. Para mais detalhes, veja Trabalhando com pacotes escopados.