Installez les dépendances globalement et localement à l'aide de paquet.json
À l'aide de mnp, nous pouvons installer les modules à l'échelle mondiale à l'aide de -g
option. Comment pouvons-nous le faire dans le package.fichier json?
Supposons, ce sont mes dépendances dans le paquet.fichier json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Quand je lance npm install
, je veux seulement node.io
pour être installée à l'échelle mondiale, le reste des autres doit être installé localement. Est-il une option pour cela?
- Vous ne pouvez pas. Vous pouvez cependant régler
"preferGlobal": true
à l'intérieur de paquet.json pour un module. - ouais, je sais au sujet de <code>preferGlobal</code>, mais qui permettrait d'installer toutes les dépendances à l'échelle mondiale... en tout cas Merci! je suppose qu'il n'existe pas de fonctionnalité...
- Je ne le pense pas. Il installe le module en cours globallly. Si une personne de la dépendance a la valeur true, il peut également être installé à l'échelle mondiale. Vraiment, vous devriez juste demander à @isaacs dans #node.js
- Global installations peut conduire à la dépendance de l'enfer. Dire package besoins d'Une version 0.3.3 et le paquet B version 0.3.4 et les deux ne fonctionnent pas avec l'autre version. Ensuite, vous aurez besoin de deux machines à accueillir les deux paquets.
- aucun de ces commentaires m'aider avec ce problème... ce serait bien si vous le code me montrer plus que juste
"preferGlobal":true
... je ne sais pas vraiment où mettre ce package.json. npmjs.org/doc/json.html Le mécanisme national de prévention de la documentation dit que preferGlobal est pour votre propre paquet et de ce paramètre, il sera installer votre propre forfait global. il semble que plus d'un guide, bien.
Vous devez vous connecter pour publier un commentaire.
Nouvelle Note:, Vous ne voulez pas ou besoin de le faire. Ce que vous voulez probablement faire est de simplement mettre ces types de commande dépendances de compilation/test etc. dans le
devDependencies
la section de votre colis.json. À tout moment vous utilisez quelque chose descripts
dans le paquet.json votre devDependencies commandes (en node_modules/.bin) agissent comme si ils sont dans votre chemin.Par exemple:
Puis dans le paquet.json:
Alors à votre invite de commande, vous pouvez exécuter:
Mais si vous vraiment souhaitez installer l'échelle mondiale, vous pouvez ajouter un préinstaller dans la section de scripts du paquet.json:
Donc en fait mon npm install exécute npm install de nouveau .. ce qui est bizarre, mais semble fonctionner.
Remarque: vous pouvez rencontrer des problèmes si vous utilisez la configuration la plus courante pour
npm
où le Nœud package installe nécessairesudo
. Une option est de changer votrenpm
de configuration si ce n'est pas nécessaire:npm config set prefix ~/npm
, ajouter $HOME/ngp/bin à la variable d'environnement $PATH en ajoutantexport PATH=$HOME/npm/bin:$PATH
à votre~/.bashrc
.npm i -g underscore-cli
. il donne un avertissement au sujet de wd se tromper. wd moyens répertoire de travail, je suppose. quand j'ai manuellement sur la ligne de commande, alors les choses vont bien, mais je préfère si l'utilisateur est en mesure de traiter avec l'installation de mon code avec un simplenpm install
npm list module -g || npm install module -g
comme mnp sera de retour de sortie appropriée des valeurs.npm
besoins de la--unsafe-perm
ajout de l'option pour elle, car par défaut, il essaie de déclasser des privilèges lors de l'exécution de scripts. Voir github.com/isaacs/npm/issues/3497."preinstall" : "scripts/preinstall.sh"
).&&
, par exemplenpm install -g bower && npm install -g grunt-cli
En raison des inconvénients qui sont décrits ci-dessous, je vous recommande à la suite de la accepté de répondre:
Mon original, mais pas recommandé suit la réponse.
Au lieu d'utiliser une installation globale, vous pouvez l'ajouter à votre
devDependencies
(--save-dev
) et ensuite exécuter le binaire à partir de n'importe où à l'intérieur de votre projet:Dans votre cas:
Cet ingénieur fourni une
npm-exec
alias comme un raccourci. Cet ingénieur utilise un shell script appeléenv.sh
. Mais je préfère utiliser$(npm bin)
directement, pour éviter toute surcharge de fichier ou de l'installation.Bien qu'il fait à chaque appel, un peu plus grand, il devrait travail juste, la prévention:
sudo
Inconvénients:
$(npm bin)
ne fonctionne pas sur Windows.npm bin
dossier. (Installer npm-exécuter ou npm-qui pour les trouver.)Il semble une meilleure solution est de placer les tâches courantes (telles que la construction et les minifying) dans le section "scripts" de votre
package.json
, comme Jason montre ci-dessus..bashrc
d'ajouter facilement de labin/
répertoire de votrePATH
variable d'environnement:alias nodebin='export PATH=$(npm bin)/:$PATH'
. Exécuternodebin
et alors vous pouvez simplement taper vos commandes comme d'habitude.C'est un peu vieux mais j'ai couru dans l'exigence voici donc la solution que j'ai trouvé.
Le Problème:
Notre équipe de développement a conservé de nombreuses .NET application web les produits nous sont migration vers AngularJS/Bootstrap. VS2010 ne se prête pas facilement à la coutume de construire des processus et mes développeurs sont systématiquement de travailler sur plusieurs versions de nos produits. Notre VCS est de la Subversion (je sais, je sais. Je suis en train de passer à Git, mais mes satanés personnel de marketing est si exigeante) et un seul VS solution inclut plusieurs projets distincts. J'ai besoin de mon personnel ont une méthode commune pour l'initialisation de leur environnement de développement sans avoir à installer le même Nœud de paquets (gulp, bower, etc.) plusieurs fois sur la même machine.
TL;DR:
Besoin "npm install" pour installer le global Node/Bower environnement de développement ainsi que localement tous les paquets nécessaires pour une .Produit NET.
Mondiale paquets doivent être installés uniquement si pas déjà installé.
Local liens de global packages doivent être créés automatiquement.
La Solution:
Nous avons déjà un cadre commun de développement partagé par tous les développeurs et tous les produits, j'ai donc créé un NodeJS script pour installer le mondial des paquets en cas de besoin et de créer des liens locaux. Le script réside dans "....\SharedFiles" par rapport au produit de base dossier:
Maintenant, si je veux mettre à jour un outil global pour nos développeurs, je mets à jour les "paquets" de l'objet et de vérifier dans le nouveau script. Mon développeurs de tester et de les exécuter avec "nœud npm-setup.js" ou par "npm install" à partir de l'un des produits en cours de développement pour mettre à jour l'environnement mondial. Tout ça prend 5 minutes.
En outre, pour configurer l'environnement pour un nouveau développeur, ils doivent d'abord seulement installer NodeJS et GIT pour Windows, redémarrer leur ordinateur, consultez la rubrique "Fichiers Partagés" du dossier et tous les produits en cours de développement, et de commencer à travailler.
Le "paquet.json" pour le .Produit NET appelle ce script avant de l'installer:
Notes
Note la référence de script nécessite des barres obliques même dans un de Windows
de l'environnement.
"npm ls" donnera "npm ERR! étrangers:" des messages pour tous les paquets
localement liés parce qu'ils ne sont pas répertoriés dans le "paquet.json"
"dépendances".
Modifier 1/29/16
La mise à jour
npm-setup.js
script ci-dessus a été modifié comme suit:Package "version"
var packages
est maintenant le "package" valeur passée ànpm install
sur la ligne de commande. Cela a été modifiée afin de permettre l'installation de packages à partir d'un endroit autre que le régime enregistré d'référentiel.Si le paquet est déjà installé mais n'est pas celui demandé, le paquet est supprimé et la bonne installé.
Pour des raisons inconnues, la ngp sera régulièrement jeter un EBUSY erreur (-4082) lors de l'exécution d'une installation ou d'un lien. Cette erreur est pris au piège et la commande ré-exécuté. L'erreur se produit rarement une deuxième fois et semble toujours être claire.
Tous les modules de colis.json sont installés ./node_modules/
Je ne pouvais pas trouver cette explicitement mentionné, mais c'est le package.json de référence pour NPM.
Vous pouvez utiliser un fichier séparé, comme
npm_globals.txt
, au lieu depackage.json
. Ce fichier contiendra chaque module sur une nouvelle ligne, comme cela,Alors dans la ligne de commande exécuter,
Vérifier qu'ils ont installé correctement avec,
Comme si vous devrait le faire ou pas, je pense que tout dépend de cas d'utilisation. Pour la plupart des projets, ce n'est pas nécessaire; et d'avoir votre projet
package.json
encapsuler ces outils et de ces dépendances ensemble est bien préférable.Mais aujourd'hui, je trouve que je suis toujours à l'installation decreate-react-app
et d'autres de la CLI à l'échelle mondiale quand je saute sur une nouvelle machine. C'est agréable d'avoir un moyen facile d'installer un outil global et de ses dépendances lorsque le contrôle de version n'a pas beaucoup d'importance.Et aujourd'hui, je suis en utilisant
npx
, un mécanisme national de prévention paquet de coureur, au lieu de l'installation des packages à l'échelle mondiale.