Eu gostaria de usar o grunt-contrib-jasmine
pacote NPM. Tem várias dependências. Parte do gráfico de dependência fica assim:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
Infelizmente, há um erro nesta versão phantomjs
que impede a instalação correta no Mac OS X. Isso foi corrigido na versão mais recente.
Como posso grunt-lib-phantomjs
usar uma versão mais recente do phantomjs
?
Algum contexto adicional:
grunt-contrib-jasmine
requer explicitamente a versão"~0.2.0"
degrunt-lib-phantomjs
, que requer explicitamente a versão"~1.8.1"
dephantomjs
.- Adicionar
phantomjs
as dependências do meu pacote primeiro não tem efeito; as duas versões estão instaladas egrunt-contrib-jasmine
ainda usam as versões mais antigas (consulte: Ao instalar um pacote com o NPM, você pode dizer para ele usar uma versão diferente de uma de suas dependências? ).
git clone
ou garfo módulo necessário. Você também pode remover aninhadophantomjs
manualmente.grunt-contrib-jasmine
está em 0.5.1, que usa[email protected]
, que usa[email protected]
:)Respostas:
Você pode usar a funcionalidade npm shrinkwrap , a fim de substituir qualquer dependência ou subdependência .
Acabei de fazer isso em um projeto difícil. Precisávamos de uma versão mais recente do connect, desde 2.7.3. estava causando problemas para nós. Então, eu criei um arquivo chamado npm-shrinkwrap.json:
O npm deve buscá-lo automaticamente durante a instalação do projeto.
(Consulte: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
fonte
grunt-contrib-connect
dependência e seus filhos estão instalados. Todas as minhas outras dependências no package.json não estão instaladas.node_modules
diretório para que o despejo completo de dependência do shrinkwrap fosse exatamente o que eu queria, não apenas substituindo. Mas ainda é um tipo de solução dolorosa.node_modules
, a execução de uma instalação com um mínimo de retração parece deixardevDependencies
intacta, embora seja ignoradadependencies
, mas a execução de outra instalação remove os itens não explícitos; portanto, por enquanto, é importante executarnpm shrinkwrap
para obter um arquivo completo, modificar a parte em questão e em seguida, executarnpm install
novamente)Para aqueles a partir de 2018 e além, usando o npm versão 5 ou posterior: edite seu
package-lock.json
: remova a biblioteca da"requires"
seção e adicione-a em "dependências".Por exemplo, você deseja que o
deglob
pacote use aglob
versão do pacote em3.2.11
vez da versão atual. Você abrepackage-lock.json
e vê:Remova
"glob": "7.1.2",
de"requires"
, adicione"dependencies"
com a versão apropriada:Agora remova sua
node_modules
pasta, executenpm install
e ela adicionará partes ausentes à"dependencies"
seção.fonte
npm install
funcione uma vez. No meu caso, as edições são necessárias, pois o dep aninhado está causando uma falha.npm i
em vez de editar o seu pacote-lock.json e adicionando a dependência criança "dependências" lá, adicionar a dependência da criança à sua package.json "dependências" seçãonpm install
novamente, todas as alteraçõespackage-lock.json
serão revertidas e a versão ruim do dep será recuperada.npm ci
e isso não toca opackage-lock.json
Para quem usa fio.
Tentei usar o npm shrinkwrap até descobrir que o cli do fio ignorava meu arquivo npm-shrinkwrap.json.
O Yarn tem https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ para isso. Arrumado.
Confira esta resposta também: https://stackoverflow.com/a/41082766/3051080
fonte
Eu tive um problema em que uma das dependências aninhadas tinha uma vulnerabilidade de auditoria npm, mas ainda queria manter a versão da dependência pai. a solução npm shrinkwrap não funcionou para mim, então o que fiz para substituir a versão de dependência aninhada:
fonte
O NPM shrinkwrap oferece uma boa solução para esse problema. Ele nos permite substituir a versão de uma dependência específica de um submódulo específico.
Essencialmente, quando você executa a instalação do npm, o npm primeiro procura no diretório raiz para verificar se existe um arquivo npm-shrinkwrap.json. Caso isso aconteça, ele será usado primeiro para determinar as dependências do pacote e, em seguida, voltar ao processo normal de trabalho com os arquivos package.json.
Para criar um npm-shrinkwrap.json, tudo que você precisa fazer é
código:
fonte
Encontrei uma solução que funcionou para mim.
Assim. Primeiro edite seu arquivo npm-shrinkwrap.json conforme recomendado em todas as outras soluções.
Então, (no Windows):
As outras soluções propostas são boas o suficiente se você estiver executando a operação 'npm install' apenas uma vez. Mas após a primeira 'instalação do npm', o arquivo 'npm-shrinkwrap.json' é modificado novamente como antes da sua modificação.
fonte