Capítulo 4 do Nodejs (princípio de instalação do Npm)

O que acontece quando o npm install é executado?

Em primeiro lugar, as dependências instaladas serão armazenadas em node_modules no diretório raiz. Por padrão, eles são instalados de maneira simples e as regras de classificação são .bin primeiro, depois @ series e, em seguida, classificam abcd de acordo com a primeira letra , e o algoritmo usado é a passagem em largura. Ao percorrer a árvore de dependências, o npm primeiro processará as dependências no diretório raiz do projeto e, em seguida, processará as dependências de cada pacote dependente camada por camada até que todas as dependências sejam processadas. Ao processar cada dependência, o npm verificará se o número da versão da dependência corresponde aos requisitos de versão de outras dependências na árvore de dependências e, caso contrário, tentará instalar a versão apropriada

imagem.png

Plano?

O achatamento é apenas ideal da seguinte forma

imagem.png

Ao instalar um módulo secundário, se um módulo com o mesmo nome e versão for encontrado no primeiro nível, esse módulo será reutilizado diretamente

Como o módulo C sob o módulo A está instalado no primeiro nível, isso permite que o módulo B reutilize o módulo C sob o mesmo nível; e o nome e a versão são os mesmos

estado não ideal

imagem.png

Como os módulos dependentes exigidos por B e A são diferentes (o requisito em B é C de v2.0 e o requisito de C em A é C de v1.0), então B não pode reutilizar o módulo C v1.0 em A como em 2. Se a redundância do módulo ainda ocorrer nesta situação, ele continuará a criar uma camada de node_modules para B, que não é plana.

processo de acompanhamento de instalação npm

imagem.png

O processo específico pode ser visto na figura, é bem detalhado.

Quanto ao que o npmrc pode configurar, darei a você uma referência de demonstração

registry=http://registry.npmjs.org/
# 定义npm的registry,即npm的包下载源

proxy=http://proxy.example.com:8080/
# 定义npm的代理服务器,用于访问网络

https-proxy=http://proxy.example.com:8080/
# 定义npm的https代理服务器,用于访问网络

strict-ssl=true
# 是否在SSL证书验证错误时退出

cafile=/path/to/cafile.pem
# 定义自定义CA证书文件的路径

user-agent=npm/{npm-version} node/{node-version} {platform}
# 自定义请求头中的User-Agent

save=true
# 安装包时是否自动保存到package.json的dependencies中

save-dev=true
# 安装包时是否自动保存到package.json的devDependencies中

save-exact=true
# 安装包时是否精确保存版本号

engine-strict=true
# 是否在安装时检查依赖的node和npm版本是否符合要求

scripts-prepend-node-path=true
# 是否在运行脚本时自动将node的路径添加到PATH环境变量中

A função de package-lock.json

Muitos amigos só sabem que essa coisa pode bloquear os detalhes da árvore de dependência do registro de versão

  • versão Este parâmetro especifica o número da versão do pacote atual
  • resolvido Este parâmetro especifica o endereço de download do pacote atual
  • integridade é usado para verificar a integridade do pacote
  • dev Este parâmetro especifica que o pacote atual é um pacote de dependência de desenvolvimento
  • bin Este parâmetro especifica o caminho e o nome do arquivo executável no pacote atual
  • engines Esse parâmetro especifica o intervalo de versões do Node.js do qual o pacote atual depende

O ponto de conhecimento está aqui, package-lock.json nos ajuda a fazer o cache, ele irá name + version + integritygerar uma chave única através das informações, esta chave pode encontrar o registro de cache correspondente em index-v5, que está na pasta de cache npm

imagem.png

Se um registro de cache for encontrado, ele encontrará o valor de hash do pacote tar e descompactará o arquivo binário correspondente para node_modules

imagem.png

Acho que você gosta

Origin juejin.im/post/7261119531891490877
Recomendado
Clasificación