npm-install
Sinopse
npm install (sem args, no pacote dir)npm install <nome>npm install <nome><tag>npm install <nome><versão>npm install <nome>/div>@<intervalo de versão> npm install <alias>@npm:<nome> npm install <git-hosting>div>:<git-user><repo-name>npm install <git repo url>npm install <arball file>npm install <tarball url>npm install <folder>pseudónimos: npm i, npm addopções comuns:Descrição
Este comando instala um pacote, e quaisquer pacotes dos quais dependa. Se o pacote tiver um ficheiro de pacote ou de película retráctil, a instalação de dependências será impulsionada por isso, com um
npm-shrinkwrap.json
tendo precedência se ambos os ficheiros existirem. Ver package-lock.json enpm shrinkwrap
.A
package
is:
- a) uma pasta contendo um programa descrito por um
package.json
file- b) um gzipped tarball contendo (a)
- c) uma url que resolve (b)
- d) a
<name>@<version>
que é publicada no registo (verregistry
) com (c)- e) a
<name>@<tag>
(vernpm dist-tag
) que aponta para (d)- f) a
<name>
que tem uma etiqueta "mais recente" que satisfaz (e)- g) a
<git remote url>
que resolve a (a)Even se nunca publicar o seu pacote, pode ainda obter muitos benefícios de usar npm se quiser apenas escrever um programa de nó (a), e talvez se quiser também ser capaz de o instalar facilmente noutro local, embalando-o num tarball (b).
npm install
(no directório de pacotes, sem argumentos):Instale as dependências na pasta local de módulos_de_nó.
No modo global (isto é, com
-g
ou--global
anexado ao comando),instala o contexto do pacote actual (isto é, o directório de trabalho actual) como um pacote global.Por defeito,
npm install
instalará todos os módulos listados como dependências empackage.json
.Com o
--production
flag (ou quando oNODE_ENV
variável de ambiente é definido paraproduction
), npm não instalará os módulos listados emdevDependencies
. Para instalar todos os módulos listados em ambosdependencies
edevDependencies
quandoNODE_ENV
variável de ambiente está definido paraproduction
,pode usar--production=false
.NOTE: A bandeira
--production
não tem significado particular quando se acrescenta adeptos a um projecto.
npm install <folder>
:Instalar o pacote no directório como um link simbólico no projecto actual. As suas dependências serão instaladas antes de serem ligadas. Se
<folder>
sitsinside the root of your project, as suas dependências podem ser içadas para thetoplevelnode_modules
como seriam para outros tipos de dependências.
npm install <tarball file>
:instalar um pacote que se encontra no sistema de ficheiros. Nota: se quiser apenas ligar um directório dev à sua raiz npm, pode fazê-lo mais facilmente utilizando .
Requisitos de tarball:
O nome do ficheiro deve usar
.tar
.tar.gz
, ou.tgz
à extensão.- p> O conteúdo da embalagem deve residir numa subpasta dentro do tarball (normalmente é chamado
package/
). npm retira uma camada de directório ao instalar o pacote (um equivalente detar x --strip-components=1
é executado).O pacote deve conter um
package.json
ficheiro comname
eversion
propriedades.Exemplo:
npm install ./package.tgz
npm install <tarball url>
:p>>p> Vai buscar a url de tarball, e depois instala-a. A fim de distinguir esta e outras opções, o argumento deve começar com "http://" ou "https://"
Exemplo:
npm install https://github.com/indexzero/forever/tarball/v0.5.6
npm install <name>
:Faz um
<name>@<tag>
instalar, onde<tag>
é a configuração "tag". (Seeconfig
. O valor por defeito da configuração élatest
.)Na maioria dos casos, isto instalará a versão dos módulos marcados como
latest
no registo npm.Exemplo:
npm install sax
npm install <alias>@npm:<name>
:Instalar um pacote sob um pseudónimo personalizado. Permite múltiplas versões de pacotes com o mesmo nome lado a lado, nomes de importação mais convenientes para pacotes com outros longos e usando como substitutos os garfos ou pacotes bifurcados npm. O aliasing funciona apenas no seu projecto e não renomeia pacotes em dependências transitivas. Os aliases devem seguir as convenções de nomenclatura indicadas em
validate-npm-package-name
.Exemplos:
npm install my-react@npm:reactnpm install jquery2@npm:jquery@2npm install jquery3@npm:jquery@3npm install npa@npm:npm-package-arg`npm install` guarda quaisquer pacotes especificados em `dependências` por defeito.Adicionalmente, pode controlar onde e como são guardados com algumasbandeiras adicionais:div>* `-P, --save-prod`: O pacote aparecerá nas suas `dependências`. Esta é adefault a menos que `-D` ou `-O` estejam presentes.* `-D, --save-dev`: O pacote aparecerá na sua `devDependências`.* `-O, --save-opcional`: O pacote aparecerá no seu `optionalDependencies`.* `--no-save-save': Impede salvar para `dependências`.quando utilizar qualquer uma das opções acima para salvar dependências para o seupackage.json, existem duas bandeiras adicionais opcionais:* `-E, --save-exact`: As dependências guardadas serão configuradas com umversão exacta em vez de utilizar o intervalo de semver padrão de npmoperador.div>* `-B, --save-bundle`: As dependências guardadas também serão adicionadas à sua lista de "dependências-bundleDependencies".Further, se tiver um `npm-shrinkwrap.json` ou `package-lock'.json` então ittambém será actualizado.<scopo>` é opcional. O pacote será descarregado do registoassociado com o âmbito especificado. Se nenhum registo estiver associado ao âmbito dado, o registo padrão é assumido. Ver (/cli/v6/using-npm/scope).Note: se não incluir o @-symbol no nome do seu scope, npm iráinterpretar isto como um repositório GitHub, ver abaixo. Os nomes dos âmbitosdevem também ser seguidos de uma barra oblíqua.Exemplos:```bashnpm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-toque --guardar-devnpm install dtrace-provider --save-opcionalnpm install readable-stream --save-exactonpm install ansi-regex --save-bundle```**Nota***: Se houver um ficheiro ou pasta chamado `<nome>` no actualdirectório de trabalho, então tentará instalar isso, e só tentaráfetar o pacote pelo nome se não for válido.
npm install <name>@<tag>
:instalar a versão do pacote que é referenciada pela etiqueta especificada.Se a etiqueta não existir nos dados de registo para esse pacote, então isto falhará.
Exemplo:
npm install sax@latestnpm install @myorg/mypackage@latest
npm install <name>@<version>
:Instalar a versão especificada do pacote. Isto irá falhar se a versão não tiver sido publicada no registo.
Exemplo:
npm install [email protected]npm install @myorg/[email protected]
npm install <name>@<version range>
:instalar uma versão do pacote que corresponda à gama de versões especificada. Isto seguirá as mesmas regras para resolver as dependências descritas em
package.json
.Note que a maioria dos intervalos de versão devem ser colocados entre aspas para que a sua concha a trate como um único argumento.
Exemplo:
npm install sax@"><0.2.0"npm install @myorg/privatepackage@"><0.2.0"
npm install <git remote url>
:p> instala o pacote a partir do fornecedor de git hospedado, clonando-o com
git
.Para uma url remota de git completa, apenas essa URL será tentada.<protocolo><hostname><path>
<protocol>
é um dosgit
git+ssh
git+http
git+https
, ougit+file
.Se
#<commit-ish>
for fornecido, será utilizado para clonar exactamente esse compromisso. Se o commit-ish tiver o formato#semver:<semver>
<semver>
pode ser qualquer intervalo de semver válido ou versão exacta, e npm procurará quaisquer tags ou refs que correspondam a esse intervalo no repositório remoto, tal como o faria para a dependência de aregistros. Se nem#<commit-ish>
nem#semver:<semver>
for especificado, então o ramo padrão do repositório é utilizado.Se o repositório fizer uso de submódulos, esses submódulos serão bem clonados.
Se o pacote a ser instalado contém um
prepare
script, o seudependencies
edevDependencies
será instalado, e o prepareescript será executado, antes de o pacote ser embalado e instalado.As seguintes variáveis de ambiente de git são reconhecidas por npm e serão adicionadas ao ambiente quando o git for executado:
GIT_ASKPASS
- >p>
GIT_EXEC_PATH
GIT_PROXY_COMMAND
- >p>>
GIT_SSH
GIT_SSH_COMMAND
GIT_SSL_CAINFO
GIT_SSL_NO_VERIFY
Ver a página do homem idiota para detalhes.
Exemplos:
npm install git+ssh://[email protected]:npm/cli.git#v1.0.27npm install git+ssh://[email protected]:npm/cli#semver:^5.0npm install git+https://[email protected]/npm/cli.gitnpm install git://github.com/npm/cli.git#v1.0.27GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/cli.gitp>
npm install <githubname>/<githubrepo>
:
npm install github:<githubname>/<githubrepo>
:
instalar a embalagem em
https://github.com/githubname/githubrepo
tentando cloná-la usandogit
.Se
#<commit-ish>
for fornecido, será utilizado para clonar exactamente esse compromisso. Se o commit-ish tiver o formato#semver:<semver>
<semver>
pode ser qualquer intervalo de semver válido ou versão exacta, e npm procurará quaisquer tags ou refs correspondentes a esse intervalo no repositório remoto, tal como o faria para a dependência de aregistros. Se nem#<commit-ish>
nem#semver:<semver>
for especificado, entãomaster
é utilizado.como nas dependências git normais,
dependencies
edevDependencies
será instalado se o pacote tiver um scriptprepare
, antes de o pacote ser instalado.Exemplos:
npm install mygithubuser/myprojectnpm install github:mygithubuser/myproject
npm install gist:<gistID>
:
p> Instalar o pacote em https://gist.github.com/gistID
tentando tocloneá-lo usando git
. O nome de utilizador do GitHub associado ao gist é opcional e não será guardado em package.json
.
como nas dependências regulares do git, dependencies
e devDependencies
será instalado se o pacote tiver um script prepare
, antes de o pacote ser instalado.
Exemplo:
npm install gist:
npm install bitbucket:<bitbucketname>/<bitbucketrepo>
:
instalar o pacote em https://bitbucket.org/bitbucketname/bitbucketrepo
tentando cloná-lo usando git
.
Se #<commit-ish>
for fornecido, será utilizado para clonar exactamente esse compromisso. Se o commit-ish tiver o formato #semver:<semver>
<semver>
pode ser qualquer intervalo de semver válido ou versão exacta, e npm procurará quaisquer tags ou refs correspondentes a esse intervalo no repositório remoto, tal como o faria para a dependência de aregistros. Se nem #<commit-ish>
nem #semver:<semver>
for especificado, então master
é utilizado.
como nas dependências git regulares, dependencies
e devDependencies
será instalado se o pacote tiver um script prepare
, antes de o pacote ser instalado.
Exemplo:
npm install bitbucket:mybitbucketuser/myproject
:
instalar o pacote em https://gitlab.com/gitlabname/gitlabrepo
tentando cloná-lo usando git
.
Se #<commit-ish>
for fornecido, será utilizado para clonar exactamente esse compromisso. Se o commit-ish tiver o formato #semver:<semver>
<semver>
pode ser qualquer intervalo de semver válido ou versão exacta, e npm procurará quaisquer tags ou refs que correspondam a esse intervalo no repositório remoto, tal como o faria para a dependência de aregistros. Se nem #<commit-ish>
nem #semver:<semver>
for especificado, então master
é utilizado.
como nas dependências git normais, dependencies
e devDependencies
será instalado se o pacote tiver um script prepare
, antes de o pacote ser instalado.
Exemplo:
npm install gitlab:mygitlabuser/myprojectnpm install gitlab:myusr/myproj#semver:^5.0
Pode combinar múltiplos argumentos, e mesmo múltiplos tipos de argumentos. Por exemplo:
npm install sax@"><0.2.0" supervisor de bancada
O argumento --tag
aplicar-se-á a todos os alvos de instalação especificados. Se atag com o nome dado existir, a versão etiquetada é preferida em vez de newerversions.
O argumento --dry-run
relatará da forma habitual o que a instalação teria feito sem realmente instalar nada.
O --package-lock-only
argumento apenas actualizará o package-lock.json
,em vez de verificar node_modules
e descarregar dependências.
O -f
ou --force
argumento obrigará npm a ir buscar recursos remotos, mesmo que exista uma cópia alocal em disco.
npm install sax --force
O argumento --no-fund
esconderá a mensagem exibida no final de cada instalação que reconhece o número de dependências à procura de financiamento.Ver npm-fund(1)
O argumento -g
ou --global
fará com que npm instale o pacote globalmente mais do que localmente. Ver folders.
O argumento --global-style
fará com que npm instale o pacote na sua pasta local node_modules
com o mesmo layout que usa com a pasta global node_modules
. Apenas as suas dependências directas aparecerão emnode_modules
e tudo aquilo de que dependem será aplanado nas suas pastasnode_modules
. Isto obviamente eliminará algum deduping.
The --ignore-scripts
argumento fará com que npm não execute anyscripts definidos no package.json. Ver scripts
.
O argumento --legacy-bundling
fará com que npm instale o pacote de modo a que versões de npm anteriores a 1.4, como a incluída com o nó 0.8, possam instalar o pacote. Isto elimina todos os deduping.
O argumento --link
fará com que npm ligue instalações globais ao espaço local em alguns casos.
O argumento --no-bin-links
impedirá npm de criar links simbólicos para quaisquer binários que o pacote possa conter.
O argumento --no-optional
impedirá que dependências opcionais sejam instaladas.
O argumento --no-shrinkwrap
, que ignorará um ficheiro de fecho ou de película retráctil disponível e utilizará o pacote.json em vez disso.
O --no-package-lock
argumento impedirá o npm de criar umpackage-lock.json
ficheiro. Ao correr com o package-lock desactivado npm não irá automaticamente podar os módulos do seu nó quando instalar.
O argumento --nodedir=/path/to/node/source
permitirá a npm encontrar o código fonte do nó para que npm possa compilar módulos nativos.
O argumento --only={prod|dev}
fará com que apenasdevDependencies
ou apenas nãodevDependencies
seja instalado independentemente do argumento NODE_ENV
.
O argumento --no-audit
pode ser utilizado para desactivar o envio de relatórios de auditoria para os registos configurados. Ver npm-audit
para detalhes sobre o que é enviado.
p>Verconfig
. Muitos dos parâmetros de configuração têm algum efeito na instalação, uma vez que é a maior parte do que o npm faz.
Algoritmo
Para instalar um pacote, npm utiliza o seguinte algoritmo:
load the existing node_modules tree from diskclone the treefetch get the package.json e metadados variados e adicioná-los ao clonepassear o clone e adicionar quaisquer dependências em faltaas dependências serão adicionadas o mais próximo possível do toposem quebrar quaisquer outros móduloscomparar a árvore original com a árvore clonada e fazer uma lista deacções a tomar para converter uma à outraexecutar todas as acções, deepest firsttipos de acções são instalar, actualizar, remover e mover
Para isto package{dep}
estrutura: A{B,C}, B{C}, C{D}
, este algoritmo produz:
A+-- B
isto é, a dependência de B a C é satisfeita pelo facto de Aalready ter causado a instalação de C a um nível superior. D ainda está instalado no nível superior, porque nada entra em conflito com ele.
Para A{B,C}, B{C,D@1}, C{D@2}
, este algoritmo produz:
A+-- B+-- C`-- D@2+-- D@1
Porque B’s D@1 será instalado no nível superior, C tem agora de instalar D@2privately para si próprio. Este algoritmo é determinístico, mas árvores diferentes podem ser produzidas se duas dependências forem solicitadas para instalação numa ordem diferente.
p>Ver pastas para uma descrição mais detalhada das estruturas de pastas específicas que npm cria.
Limitações do Algoritmo de Instalação npm
npm recusar-se-á a instalar qualquer pacote com um nome idêntico ao pacote actual. Isto pode ser anulado com o --force
flag, mas na maioria dos casos pode simplesmente ser resolvido alterando o nome do pacote local.
Existem alguns casos muito raros e patológicos onde um ciclo cancausa npm para tentar instalar uma árvore interminável de pacotes. Este é o caso mais simples:
A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
where A
é alguma versão de um pacote, e A'
é uma versão diferente do mesmo pacote. Porque B
depende de uma versão diferente de A
do que aquela que já se encontra na árvore, deve instalar uma cópia separada. O mesmo é válido para A'
, que deve instalar B'
. Porque B'
div>A
, que foi anulado, o ciclo cai em regressão infinita.
Para evitar esta situação, npm flat-out recusa-se a instalar qualquername@version
que já esteja presente em qualquer parte da árvore dos antepassados do packagefolder. Uma solução mais correcta, mas mais complexa, seria ligarymlink a versão existente para o novo local. Se isto alguma vez afectar um caso real de utilização, será investigado.
Ver Também
- pastasnpm
- actualizaçãonpm
- auditorianpm
- fundonpm
- ligaçãonpm
- npm rebuild
- npm scripts
- npm build
- npm config
- npm config
- npmrc
- npm registry
- npm dist-tag
- npm uninstall
- npm shrinkwrap
- package.json