Usando o npm, podemos instalar os módulos globalmente usando a -g
opção Como podemos fazer isso no arquivo package.json?
Suponha, essas são minhas dependências no arquivo package.json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Quando eu executo npm install
, quero apenas node.io
ser instalado globalmente, o restante deve ser instalado localmente. Existe uma opção para isso?
"preferGlobal": true
dentro de package.json para um módulo."preferGlobal":true
... eu realmente não sei onde colocar isso no package.json. npmjs.org/doc/json.html A documentação do NPM diz que preferGlobal é para seu próprio pacote e essa configuração fará com que você instale seu próprio pacote como global. parece mais um guia, no entanto.Respostas:
Nova nota: você provavelmente não quer ou precisa fazer isso. O que você provavelmente quer fazer é apenas colocar esses tipos de dependências de comando para compilar / testar etc. na
devDependencies
seção do seu package.json. Sempre que você usa algo doscripts
package.json, os comandos devDependencies (em node_modules / .bin) agem como se estivessem no seu caminho.Por exemplo:
Em seguida, em package.json:
Em seguida, no prompt de comando, você pode executar:
Mas se você realmente deseja instalar globalmente, pode adicionar uma pré-instalação na seção de scripts do pacote.json:
Então, na verdade, o meu npm install executa o npm install novamente .. o que é estranho, mas parece funcionar.
Nota: você pode ter problemas se estiver usando a configuração mais comum para
npm
onde o pacote global do Node é necessáriosudo
. Uma opção é alterar suanpm
configuração para que isso não seja necessário:npm config set prefix ~/npm
, adicione $ HOME / npm / bin a $ PATH, anexandoexport PATH=$HOME/npm/bin:$PATH
ao seu~/.bashrc
.fonte
npm i -g underscore-cli
. emite um aviso sobre a wd estar errada. wd significa diretório de trabalho, eu acho. quando eu manualmente fazer isso na linha de comando, em seguida, as coisas vão bem, no entanto Eu preferiria se o usuário fosse capaz de lidar com a instalação meu código com um simplesnpm install
npm list module -g || npm install module -g
o npm retornará os valores de saída adequados."preinstall" : "scripts/preinstall.sh"
).&&
, por exemplonpm install -g bower && npm install -g grunt-cli
Devido às desvantagens descritas abaixo, eu recomendaria seguir a resposta aceita:
Minha resposta original, mas não recomendada, segue.
Em vez de usar uma instalação global, você pode adicionar o pacote ao seu
devDependencies
(--save-dev
) e depois executar o binário de qualquer lugar dentro do seu projeto:No seu caso:
Este engenheiro forneceu um
npm-exec
alias como atalho. Este engenheiro usa um shellscript chamadoenv.sh
. Mas eu prefiro usar$(npm bin)
diretamente, para evitar qualquer arquivo ou configuração extra.Embora torne cada chamada um pouco maior, deve funcionar , impedindo:
sudo
Desvantagens:
$(npm bin)
não funcionará no Windows.npm bin
pasta. (Instale npm-run ou npm-which para encontrá-los.)Parece que uma solução melhor é colocar tarefas comuns (como compilar e minificar) na seção "scripts" do seu
package.json
, como Jason demonstra acima.fonte
.bashrc
facilmente adicionar obin/
diretório a suaPATH
variável de ambiente:alias nodebin='export PATH=$(npm bin)/:$PATH'
. Executenodebin
e, em seguida, você pode apenas digitar seus comandos, como de costume.Isso é um pouco antigo, mas me deparei com o requisito, então aqui está a solução que eu criei.
O problema:
Nossa equipe de desenvolvimento mantém muitos produtos de aplicativos da Web .NET que estamos migrando para o AngularJS / Bootstrap. O VS2010 não se presta facilmente a processos de criação personalizados e meus desenvolvedores estão trabalhando rotineiramente em várias versões de nossos produtos. Nosso VCS é o Subversion (eu sei, eu sei. Estou tentando mudar para o Git, mas minha péssima equipe de marketing é muito exigente) e uma única solução de VS incluirá vários projetos separados. Eu precisava que minha equipe tivesse um método comum para inicializar seu ambiente de desenvolvimento sem precisar instalar os mesmos pacotes Node (gulp, bower etc.) várias vezes na mesma máquina.
TL; DR:
É necessário "npm install" para instalar o ambiente de desenvolvimento global do Node / Bower, bem como todos os pacotes necessários localmente para um produto .NET.
Pacotes globais devem ser instalados apenas se ainda não estiverem instalados.
Links locais para pacotes globais devem ser criados automaticamente.
A solução:
Já temos uma estrutura de desenvolvimento comum compartilhada por todos os desenvolvedores e todos os produtos, por isso criei um script NodeJS para instalar os pacotes globais quando necessário e criar os links locais. O script reside em ".... \ SharedFiles" relativo à pasta base do produto:
Agora, se eu quiser atualizar uma ferramenta global para nossos desenvolvedores, atualizo o objeto "packages" e faço check-in no novo script. Meus desenvolvedores fazem check-out e executam-no com "node npm-setup.js" ou por "npm install" de qualquer um dos produtos em desenvolvimento para atualizar o ambiente global. A coisa toda leva 5 minutos.
Além disso, para configurar o ambiente para um novo desenvolvedor, primeiro é necessário instalar o NodeJS e o GIT for Windows, reiniciar o computador, verificar a pasta "Arquivos compartilhados" e todos os produtos em desenvolvimento e começar a trabalhar.
O "package.json" para o produto .NET chama esse script antes da instalação:
Notas
Observe que a referência de script requer barras, mesmo em um ambiente Windows.
"npm ls" dará "npm ERR! estranhas:" mensagens para todos os pacotes vinculados localmente porque não estão listados nas "dependências" "package.json".
Editar 29/1/16
O
npm-setup.js
script atualizado acima foi modificado da seguinte maneira:O pacote "version" in
var packages
agora é o valor do "package" passado paranpm install
a linha de comando. Isso foi alterado para permitir a instalação de pacotes de algum lugar que não seja o repositório registrado.Se o pacote já estiver instalado, mas não o solicitado, o pacote existente será removido e o pacote correto, instalado.
Por motivos desconhecidos, o npm lançará periodicamente um erro EBUSY (-4082) ao executar uma instalação ou link. Este erro está interceptado e o comando é executado novamente. O erro raramente acontece uma segunda vez e parece sempre esclarecer.
fonte
Você pode usar um arquivo separado, como
npm_globals.txt
, em vez depackage.json
. Esse arquivo conteria cada módulo em uma nova linha como esta,Em seguida, na linha de comando, execute
Verifique se eles foram instalados corretamente com,
Quanto a saber se você deve fazer isso ou não, eu acho que tudo depende do caso de uso. Para a maioria dos projetos, isso não é necessário; e ter o seu projeto
package.json
encapsular essas ferramentas e dependências é muito preferido.Atualmente, porém, acho que estou sempre instalandocreate-react-app
e outras CLIs globalmente quando pulo em uma nova máquina. É bom ter uma maneira fácil de instalar uma ferramenta global e suas dependências quando o controle de versão não importa muito.E hoje em dia, eu estou usando
npx
, um corredor pacote npm , em vez de instalar pacotes globalmente.fonte
Todos os módulos do package.json estão instalados em ./node_modules/
Não foi possível encontrar isso explicitamente, mas esta é a referência package.json para o NPM .
fonte
Crie seu próprio script para instalar dependências globais. Não é preciso muito. O package.json é bastante expansível.
Usando o exposto acima, você pode torná-lo inline, abaixo!
Veja a pré-instalação abaixo:
Os autores do nó podem não admitir package.json é um arquivo de projeto. Mas isso é.
fonte