Quais são as diferenças entre Yarn e NPM? No momento em que escrevo esta pergunta, só consigo encontrar alguns artigos na Internet mostrando qual é o equivalente Yarn de um comando NPM como este .
Eles têm as mesmas funcionalidades (eu sei que o Yarn faz cache local e parece que você só precisa baixar um pacote uma vez), mas, além disso, há algum benefício em mudar de NPM para Yarn?
javascript
npm
yarnpkg
Asha
fonte
fonte
Respostas:
ATUALIZAÇÃO: março de 2018 (um pouco tarde ...)
Desde a versão 5,
npm
package-lock.json
que corrige toda a sua árvore de dependências da mesma forma que o mecanismo de bloqueio yarn (ou qualquer outro) faz,--save
agora está implícito paranpm i
O npm 5.7.0 introduziu ainda o
npm ci
comando para instalar dependências mais rapidamente em um ambiente de integração contínua, instalando apenas os pacotes encontrados nopackage-lock.json
(relatando um erro se opackage-lock.json
epackage.json
não estiverem sincronizados).Pessoalmente , ainda uso
npm
.Original
Estou detestam para citar directamente a partir de docs, mas eles fazem um grande trabalho de explicar por que, de forma concisa o suficiente para que eu não vejo como resumir ainda mais as idéias.
Largamente:
Você sempre sabe que está obtendo a mesma coisa em todas as máquinas de desenvolvimento
Ele paraleliza operações que
npm
não, eIsso torna o uso da rede mais eficiente.
Ele também pode fazer um uso mais eficiente de outros recursos do sistema (como RAM) .
Quais são as experiências de produção das pessoas com ele? Quem sabe, é uma criança para o público em geral.
TL; DR de Yehuda Katz :
Boa postagem no blog
“ NPM vs Yarn Cheat Sheet ” por Gant Laborde
Versão um pouco mais longa do projeto :
E do README.md :
fonte
--flat
opção que força uma estrutura plana real onde apenas uma versão de cada dependência pode ser instalada, mas qual é o comportamento padrão nisso? Obrigado.install -g
.npm :
Fios :
fonte
O que é PNPM?
pnpm
usa links físicos e links simbólicos para salvar uma versão de um módulo apenas uma vez no disco. Ao usar npm ou Yarn, por exemplo, se você tiver 100 projetos usando a mesma versão do lodash, terá 100 cópias do lodash no disco. Com o pnpm, o lodash será salvo em um único lugar no disco e um link físico o colocará nos node_modules onde deve ser instalado.Como resultado, você economiza gigabytes de espaço em seu disco e tem instalações muito mais rápidas! Se você quiser mais detalhes sobre a estrutura exclusiva de node_modules que o pnpm cria e por que funciona bem com o ecossistema Node.js, leia este pequeno artigo: Por que devemos usar o pnpm?
Como instalar o PNPM?
Como instalar o pacote npm usando PNPM?
Benefícios de
PNPM
maisYarn
eNPM
Aqui está a barra de progresso mostrando o tempo de instalação gasto por
NPM
,YARN
ePNPM
(uma barra mais curta é melhor)Clique para verificar o benchmark completo
para obter mais detalhes, visite https://www.npmjs.com/package/pnpm
fonte
Quando você instala um pacote usando Yarn (usando yarn add packagename), ele coloca o pacote em seu disco . Durante a próxima instalação, este pacote será usado em vez de enviar uma solicitação HTTP para obter o tarball do registro.
O Yarn vem com um verificador de licença útil , que pode se tornar muito poderoso caso você precise verificar as licenças de todos os módulos dos quais depende.
Se você estiver trabalhando com software proprietário, realmente não importa qual você usar. Com npm, você pode usar npm-shrinkwrap.js, enquanto você pode usar yarn.lock com Yarn.
Para obter mais informações, leia o seguinte blog
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/
fonte
Tentando dar uma visão geral melhor para iniciantes.
O npm tem sido historicamente (2010) o gerenciador de pacotes mais popular para JavaScript. Se você quiser usá-lo para gerenciar as dependências do seu projeto, pode digitar o seguinte comando:
Isso irá gerar um
package.json
arquivo. Ele contém todas as dependências do projeto.Então
criaria um diretório
node_modules
e baixaria as dependências (que você adicionou aopackage.json
arquivo) dentro dele.Ele também criará um
package-lock.json
arquivo. Este arquivo é usado para descrever a árvore de dependências que foi gerada. Ele permite que os desenvolvedores instalem exatamente as mesmas dependências. Por exemplo, você pode imaginar um desenvolvedor atualizando uma dependência para v2 e v3, enquanto outro atualiza diretamente para v3.O npm instala dependências de uma forma não determinística, o que significa que os dois desenvolvedores podem ter um
node_modules
diretório diferente , resultando em comportamentos diferentes . ** O npm sofreu má reputação como, por exemplo, em fevereiro de 2018: um problema foi descoberto na versão 5.7.0 em que a execução de sudo npm em sistemas Linux alteraria a propriedade dos arquivos do sistema, interrompendo permanentemente o sistema operacional.Para resolver esses problemas e outros, Facebook introduziu um novo gerenciador de pacotes (2016): Fios de uma mais rápida, mais segura e mais confiável Package Manager para JavaScript.
Você pode adicionar Yarn a um projeto digitando:
yarn init
Isso criará um
package.json
arquivo. Em seguida, instale as dependências com:yarn install
Uma pasta
node_modules
será gerada. O Yarn também irá gerar um arquivo chamadoyarn.lock
. Este arquivo tem a mesma finalidade que o,package-lock.json
mas é construído usando um algoritmo determinístico e confiável, levando a compilações consistentes.Se você iniciou um projeto com o npm , pode realmente migrar para o Yarn facilmente. o fio vai consumir o mesmo
package.json
. Consulte Migrando do npm para obter mais detalhes.No entanto, o npm foi aprimorado a cada novo lançamento e alguns projetos ainda usam o npm ao invés do yarn .
fonte
A resposta de @msanford cobre quase tudo, no entanto, estou perdendo a parte de segurança (Vulnerabilidades conhecidas do OWASP).
Fio
Você pode verificá-los usando
yarn audit
, no entanto, não pode corrigi-los. Este ainda é um problema aberto em um GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).npm
Você pode usar
npm audit fix
, então alguns deles você mesmo pode consertar.Ambos, ou seja,
npm audit
&yarn audit
têm suas próprias ferramentas de integração contínua. Eles são respectivamente https://github.com/IBM/audit-ci (usado, funciona muito bem!) E https://yarnpkg.com/package/audit-ci (não usado).fonte