Copiei o package.json de outro projeto e agora quero adicionar todas as dependências às suas versões mais recentes, pois esse é um projeto novo e não me importo de consertar algo se quebrar.
Qual é a maneira mais fácil de fazer isso?
A melhor maneira que conheço agora é executar npm info express version
e atualizar o package.json manualmente para cada um. Deve haver uma maneira melhor.
{
"name": "myproject",
"description": "my node project",
"version": "1.0.0",
"engines": {
"node": "0.8.4",
"npm": "1.1.65"
},
"private": true,
"dependencies": {
"express": "~3.0.3", // how do I get these bumped to latest?
"mongodb": "~1.2.5",
"underscore": "~1.4.2",
"rjs": "~2.9.0",
"jade": "~0.27.2",
"async": "~0.1.22"
}
}
ATUALIZAÇÃO 5/1/19 : Seis anos depois, eu continuo mantendo o npm-check-updates como uma solução abrangente para esse problema. Aproveitar!
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Respostas:
Parece que o npm-check-updates é a única maneira de fazer isso acontecer agora.
No npm <3.11:
Simplesmente altere a versão de todas as dependências para
*
e executenpm update --save
. ( Nota: quebrada nas versões recentes (3.11) do npm ).Antes:
Depois de:
Obviamente, este é o martelo direto da atualização de dependências. Tudo bem se - como você disse - o projeto estiver vazio e nada puder quebrar.
Por outro lado, se você estiver trabalhando em um projeto mais maduro, provavelmente desejará verificar se não há alterações significativas em suas dependências antes da atualização.
Para ver quais módulos estão desatualizados, basta executar
npm outdated
. Ele listará quaisquer dependências instaladas que tenham versões mais recentes disponíveis.fonte
*
no package.json, pois pode acabar instalando automaticamente uma nova versão do módulo com alterações que quebram o aplicativo. Como estamos usando--save
aqui, o*
é substituído pela versão atual de cada pacote.npm install --save
o curinga é deixado no meupackage.json
.update
também não funciona para mim. Ainda estou com os curingas. Existe alguma documentação sobre isso que você conheça ou quaisquer outros recursos que eu possa consultar?npm install -g npm-check-updates
para instalar e, em seguida,npm-check-updates
verifique se suas dependências possuem atualizações enpm-check-updates -u
para atualizar as versões do package.json. Então é sónpm install
e ele fará o download de novas versões.npm update --save
vez denpm update --save-dev
.npm-check-updates
é um utilitário que ajusta automaticamente um package.json à versão mais recente de todas as dependênciasconsulte https://www.npmjs.org/package/npm-check-updates
[EDIT] Uma maneira um pouco menos intrusiva (evita uma instalação global) de fazer isso se você tiver uma versão moderna do
npm
is:fonte
ncu -a
, não atualizando o package.json também.Atualizado para o NPM mais recente
npm 2+ (Nó 0,12+):
Npm antiga (por volta de 2014):
Certifique-se de encolher os seus deps, ou você pode acabar com um projeto morto. Puxei um projeto outro dia e ele não funcionou porque meus departamentos estavam desatualizados / atualizados / uma bagunça. Se eu tivesse encolhido, o npm teria instalado exatamente o que eu precisava.
Detalhes
Para os curiosos que chegam até aqui, eis o que recomendo:
Use
npm-check-updates
ounpm outdated
para sugerir as versões mais recentes.Em seguida, faça uma instalação limpa (sem a rm, recebi alguns avisos de dependência)
Por fim, salve as versões exatas em
npm-shrinkwrap.json
comnpm shrinkwrap
Agora,
npm install
agora usaremos versões exatas emnpm-shrinkwrap.json
Se você entrar
npm-shrinkwrap.json
no git, todas as instalações usarão exatamente as mesmas versões.Essa é uma maneira de fazer a transição do desenvolvimento (todas as atualizações, o tempo todo) para a produção (ninguém toca em nada).
npm desatualizado
npm-check-updates
npm shrinkwrap
ps O Yarn está enviando sua lista de pacotes para o Facebook .
fonte
npm-shrinkwrap.json
entrar no código-fonte e confirmar sempre que atualizar, poderá sempre 'voltar para onde estava'. Eu negligenciei o recurso shrinkwrap quando comecei.npm update
apenas atualizações para a versão semver, não a mais recente.yarn upgrade package@version
?Para atualizar uma dependência para sua versão mais recente sem precisar abrir manualmente
package.json
e alterá-la, você pode executarie
Para referência, npm-install
Conforme observado pelo usuário Vespakoen em uma edição rejeitada, também é possível atualizar vários pacotes ao mesmo tempo desta maneira:
Ele também aporta um liner para o shell baseado em
npm outdated
. Veja a edição para código e explicação.PS: Eu também odeio ter que editar manualmente
package.json
coisas assim;)fonte
npm install react-native-image-picker@* --save
ncu express mocha chai
. Você também pode excluir pacotes comncu -x mocha
. Concordo que o acima é a solução mais simples para atualizar um único pacote.npm install {package-name}@latest {save flags}
Se você estiver usando o Visual Studio Code como seu IDE, esta é uma pequena extensão divertida para tornar a atualização em
package.json
um processo de um clique.Version Lens
fonte
Isso funciona a partir da NPM 1.3.15.
fonte
npm shrinkwrap
para congelar deps."react": "16.9.0"
e, em seguida, adicionei a mais recente e executeinpm i
; depois disso, como localizo qual versão do react está agora no meu projeto? desde"react":"latest"
que é o que resta no meu package.json, não um número mesmo depois que eu fiznpm i
*
como a versão para as versões mais recentes, incluindo instávellatest
como definição de versão para a versão estável mais recenteLatestStablePackages
Aqui está um exemplo:
fonte
A única ressalva que encontrei com a melhor resposta acima é que ele atualiza os módulos para a versão mais recente. Isso significa que ele pode ser atualizado para uma versão alfa instável.
Eu usaria esse utilitário npm-check-updates. Meu grupo usou essa ferramenta e funcionou efetivamente instalando as atualizações estáveis.
Como Etienne afirmou acima: instale e execute com isso:
fonte
rm -rf node_modules
antesnpm install
se livrou de alguns avisos de dependência para mim.Para ver quais pacotes têm versões mais recentes disponíveis, use o seguinte comando:
para atualizar apenas uma dependência, use o seguinte comando:
Por exemplo:
Meu
package.json
arquivo tem dependência:então eu deveria escrever:
fonte
Eu realmente gosto de como o npm-upgrade funciona. É um utilitário de linha de comando simples que percorre todas as suas dependências e permite que você veja a versão atual em comparação com a versão mais recente e atualize, se desejar.
Aqui está uma captura de tela do que acontece após a execução
npm-upgrade
na raiz do seu projeto (ao lado dopackage.json
arquivo):Para cada dependência, você pode optar por atualizar, ignorar, exibir o registro de alterações ou concluir o processo. Até agora, funcionou muito bem para mim.
EDIT: Para ficar claro, este é um pacote de terceiros que precisa ser instalado antes que o comando funcione. Ele não vem com o próprio npm:
A partir da raiz de um projeto que possui um arquivo package.json:
fonte
npm-upgrade
não funcionou para mim, masnpm upgrade
funcionou e atualizou meu arquivo package.json, que era exatamente o que eu estava procurando.npm-upgrade
é que você possa ver exatamente o que está sendo atualizado e escolher quais serão atualizados.npm upgrade
pode funcionar bem para a maioria das pessoas, mas às vezes você precisa ter um pouco mais de controle ao atualizar.npx npm-upgrade
- muito legal! :)Aqui está um regex básico para corresponder aos números das versões semânticas, para que você possa substituí-los rapidamente por um asterisco.
Versão semântica Regex
Como usar
Selecione as versões do pacote que deseja substituir no arquivo JSON.
Insira o regex acima e verifique se ele corresponde ao texto correto.
Substitua todas as correspondências por um asterisco.
Corre
npm update --save
fonte
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
e pressionarctrl+d
várias vezes até selecionar todos eles, depois acessar o número da versão (pressionar a seta para a direita 2 vezes) e pressionar ctrl espaço, e escrever"*"
Recentemente, tive que atualizar vários projetos que estavam usando o npm e o package.json para a mágica do gruntfile.js. O seguinte comando bash (comando multilinha) funcionou bem para mim:
A idéia aqui: Para canalizar a
npm outdated
saída como json, parajq
(jq é uma ferramenta de análise / consulta de linha de comando json)
(observe o uso do
--depth
argumento paranpm outdated
)jq reduz a saída apenas para o nome do pacote de nível superior.
finalmente xargs coloca cada LIBRARYNAME um de cada vez em um
npm install LIBRARYNAME --save-dev
comandoA descrição acima é o que funcionou para mim em uma máquina executando: node = v0.11.10 osx = 10.9.2 npm = 1.3.24
isso é necessário:
xargs http://en.wikipedia.org/wiki/Xargs (nativo da minha máquina, acredito)
e
jq http://stedolan.github.io/jq/ (eu o instalei com
brew install jq
)Nota: Apenas salvei as bibliotecas atualizadas no package.json dentro da chave json
devDependancies
usando--save-dev
, isso era um requisito dos meus projetos, muito possivelmente não o seu.Depois, verifico que está tudo bem com um simples
Além disso, você pode verificar as versões atuais da biblioteca instalada de nível superior com
fonte
awk
em vez disso:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Se você quiser usar uma abordagem suave por meio de uma interface de relatório interativa bonita (para terminal), sugiro usar o npm-check .
É menos um martelo e fornece a você mais conhecimento conseqüente e controle sobre suas atualizações de dependência.
Para dar uma amostra do que aguarda, aqui está uma captura de tela (extraída da página git para npm-check):
fonte
Este recurso foi introduzido no
npm v5
. atualizar para npm usandonpm install -g npm@latest
eatualizar
package.json
excluir
/node_modules
epackage-lock.json (if you have any)
correr
npm update
. isso atualizará as dependências package.json para as mais recentes, com base no semver .para atualizar para a versão mais recente. você pode ir com
npm-check-updates
fonte
Se você usar o yarn, o comando a seguir atualiza todos os pacotes para sua versão mais recente:
yarn upgrade --latest
Dos documentos deles :
fonte
package.json
- github.com/yarnpkg/yarn/issues/4390A partir da versão 5.2.0 do npm, existe uma maneira de executar isso em uma única linha sem instalar nenhum pacote adicional no registro global do npm nem localmente no aplicativo. Isso pode ser feito aproveitando o novo
npx
utilitário que acompanha o npm. ( Clique aqui para saber mais. )Execute o seguinte comando na raiz do seu projeto:
fonte
npm install
para realmente baixar as novas dependências. Então eu acho que isso só atualiza o package.json a menos que eu estou faltando alguma coisanpm install
depois que as dependências foram atualizadas.Eu uso
npm-check
para conseguir isso.Outra lista de comandos úteis que manterá os números exatos das versões em
package.json
fonte
ncu -u
e nãoncu -ua
na segunda última linha. Não consigo editar porque uma alteração de caractere não é permitida. Muito útil por sinal.Updtr!
https://github.com/peerigon/updtr
fonte
Comandos que eu tinha que usar para atualizar
package.json
paraNPM 3.10.10
:Fundo:
Eu estava usando o comando mais recente do @ josh3736, mas o meu
package.json
não foi atualizado. Notei o texto da descrição ao executarnpm-check-updates -u
:Lendo a documentação para npm-check-updates, você pode ver a diferença:
https://www.npmjs.com/package/npm-check-updates
ncu é um alias para,
npm-check-updates
como visto na mensagem ao digitarnpm-check-updates -u
:fonte
-a
é o comportamento padrão e a substituição do package.json é deixada apenas para a-u
opçãoSe você estiver usando
yarn
,yarn upgrade-interactive
é uma ferramenta realmente elegante que permite exibir suas dependências desatualizadas e depois selecionar quais você deseja atualizar.Mais razões para usar o Yarn over
npm
. Heh.fonte
package.json
- github.com/yarnpkg/yarn/issues/4390Os comandos acima são inseguros porque você pode interromper seu módulo ao alternar versões. Em vez disso, recomendo o seguinte
npm shrinkwrap
comandofonte
Tente seguir o comando se você estiver usando o npm 5 e o nó 8
atualização npm --save
fonte
update
comando não parece aumentar as dependências além da definição original. Sepackage.json
declara"1.2.3"
exatamente você não receberá1.2.4
. Isso pode ser bom ou ruim :)O código a seguir (que foi aceito) me escreveu algo como "demora muito blá-blá" e não fez nada. Provavelmente o uso da bandeira global foi o problema, idk.
Decidi usar meu editor de texto e seguir uma abordagem semi-manual.
Copiei uma lista como esta (apenas muito mais) das dependências de desenvolvimento do meu
package.json
para o editor de texto do bloco de notas ++:Defino o modo de pesquisa como expressão regular, usei o
^\s*"([^"]+)".*$
padrão para obter o nome do pacote e o substituinpm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Clicou em "substituir tudo". O otput foi este:Copiei de volta para o bash e apertei enter. Tudo foi atualizado e funcionando bem. Isso é tudo.
Eu não acho que isso seja importante, já que você precisa fazer isso de vez em quando, mas pode escrever facilmente um script que analise
package.json
e atualize seus pacotes. Eu acho que é melhor assim, porque você pode editar sua lista se precisar de algo especial, por exemplo, mantendo a versão atual de uma lib.fonte
--packageFile package.json
para que você não espere pelo stdin.Resolvi isso vendo as instruções em https://github.com/tjunnone/npm-check-updates
fonte
Encontrei outra solução para a versão recente do NPM. O que eu quero fazer é substituir todas as dependências "*" pelo número explícito da última versão. Nenhum dos métodos discutidos funcionou para mim.
O que eu fiz:
npm-check-updates -u
Tudo no package.json agora é atualizado para a última versão.
fonte
Se você não deseja instalar o npm-check-updates global, basta executar o seguinte:
fonte
Alternativa é
sempre que você usa o npm update, ele é atualizado automaticamente para a versão mais recente. Para obter mais sintaxe da versão, você pode conferir aqui: https://www.npmjs.org/doc/misc/semver.html
fonte
Solução sem pacotes adicionais
Altere a versão de cada dependência para
*
:Então corra
npm update --save
.Alguns de seus pacotes foram atualizados, mas outros não?
Essa é a parte complicada, significa que sua versão local de "react" foi menor que a mais recente. Nesse caso, o npm baixou e atualizou o pacote "react". No entanto, sua versão local do "react-google-maps" é a mesma que a mais recente.
Se você ainda deseja "atualizar" inalterado
*
, é necessário excluir esses módulos danode_modules
pasta.por exemplo, excluir
node_modules/react-google-maps
.Finalmente corra novamente
npm update --save
.Não se esqueça de executar
npm update --save-dev
se desejar atualizar as dependências de desenvolvimento.fonte
Greenkeeper, se você estiver usando o Github. https://greenkeeper.io/
É uma integração ao Github e incrivelmente fácil de configurar. Quando instalado, ele cria automaticamente solicitações pull nos repositórios especificados (ou todos, se desejado) e mantém seu código sempre atualizado, sem forçar você a fazer algo manualmente. Os PRs devem acionar uma compilação em um serviço de IC e, dependendo de uma verificação bem-sucedida ou com falha, você pode continuar descobrindo o que está causando o problema ou quando a aprovação do IC simplesmente mescla o PR.
Na parte inferior, você pode ver que a primeira compilação falhou no início e após uma confirmação ("atualização para o nó v6.9"), os testes passam para que eu possa finalmente mesclar o PR. Também vem com muitos emoji.
Outra alternativa seria https://dependencyci.com/ , no entanto, não testei intensivamente. Após uma primeira olhada, o Greenkeeper parece melhor em geral na IMO e possui melhor integração.
fonte
Você deve obter as versões desejadas mais recentes compatíveis com o seu aplicativo. Mas não as versões mais recentes.
fonte