JavaScript est de loin le langage le plus utilisé pour le développement de sites Web et d'applications Web. La multitude de ressources est stupéfiante, et plus encore, le nombre de bibliothèques disponibles.
Au début, ces bibliothèques sont peu nombreuses et faciles à entretenir; cependant, l'enfer de la dépendance s'installe assez tôt et une solution plus mature est nécessaire.
Entrez le Node Package Manager (npm) - un gestionnaire de packages JavaScript notamment utilisé en conjonction avec Node.js , bien qu'il puisse également être utilisé indépendamment. Il vous donne un contrôle exceptionnel sur les dépendances de votre projet et constitue un excellent moyen de contribuer au monde open source.
Vous pouvez commencer en exécutant simplement npm install
et l'injecter dans votre fichier JavaScript.
Vous souhaitez installer une version spécifique? Aucun problème. Exécutez npm install @1.2.3
.
Vous voulez installer un package globalement (comme Mocha ou Angular-CLI)? Ajoutez simplement un -g
comme ceci: npm install -g angular-cli mocha
.
Certes, la plupart des cas d'utilisation s'arrêtent à une installation npm, et rien d'autre n'est nécessaire. Cependant, npm propose de nombreuses fonctionnalités supplémentaires, que je vais vous expliquer, en mettant en évidence celles que je considère essentielles, vraiment utiles ou tout simplement géniales.
L'interface de ligne de commande est l'endroit où les utilisateurs passent la plupart de leur temps à interagir avec npm, et son interface d'aide est réellement utile.
L'interrogation de l'aide (npm help
) génère tout un éventail d'options et l'exécution de npm help-search
vous donne une liste de résultats de recherche directement à partir du markdown npm.
Voici les commandes principales qui se démarquent.
install
: Il est mentionné ici en raison de sa nécessité absolue lorsque vous travaillez avec npm. Utilisé pour installer un nouveau package localement ou globalement (lors de l'ajout de -g
) ou pour installer les dépendances répertoriées dans le package.json
fichier (plus à ce sujet plus tard).
uninstall
: C'est aussi un élément essentiel. Il est utilisé pour purger un package spécifique de node_modules
répertoire local ou global (lors de l'ajout de -g
).
access
: C'est le terrain de jeu des administrateurs de permissions utilisateur npm dans le contexte npm-organizations et les packages étendus (privés). Des trucs vraiment puissants. Utilisé en conjonction avec adduser
, owner
, team
, etc., il donne un contrôle précis sur qui a accès à quoi.
bin
: Où diable les paquets sont-ils installés? Exécutez cette commande pour voir le chemin absolu du fichier.
cache
: Si vous commencez à installer des packages à partir de npm gauche, droite et centre, cette commande est très utile. Soit l'appelez avec le ls
sous-commande pour afficher une liste des packages mis en cache localement ou avec clean
sous-commande pour effacer tous les packages qui se trouvent dans le cache. À l'époque où le registre npm était encore un peu instable, c'était essentiel pour revenir à un environnement stable ou pour réinitialiser les choses lorsque vous n'aviez pas correctement configuré les autorisations npm.
config
: Nous aborderons les différentes options de configuration plus tard, mais cette commande traite principalement des propriétés de configuration persistantes dans le fichier de configuration local ou global en utilisant set
, get
ou delete
sous-commandes.
dedupe
ou ddp
: Lorsque vous travaillez sur un projet sur une longue période et que vous installez des packages directement à partir de npm, cette commande parcourra l'arborescence des packages locaux et tentera de simplifier les dépendances.
évaluation heuristique d'un exemple de site web
link
: Lorsque vous développez votre propre package npm, cela vous permet de créer un lien symbolique vers le contexte global afin qu'il puisse être testé comme s'il avait été installé globalement à partir du registre npm. Par exemple, si vous écrivez un outil d'assemblage dans un nœud sur lequel une CLI est installée globalement, vous pouvez exécuter cette commande et tester le comportement de votre CLI sans avoir à la déployer au préalable.
ls
: Il est utilisé pour visualiser les dépendances de package et leurs dépendances, dans une structure arborescente. C’est cool à voir et est également utile pour les comparaisons avec d’autres projets.
outdated
: Ceci est utilisé pour évaluer l'état actuel des dépendances installées et si elles sont ou non obsolètes. Dans les projets où la liste de dépendances racine fait des centaines de lignes, une vérification manuelle des paquets est presque impossible. Ajout -g --depth=0
Cette commande vous permet également de vérifier vos packages installés globalement.
publish
: Cette commande est essentielle lors du développement de votre propre package pour npm. Il fait exactement comme son nom l'indique; il publie votre package dans le registre npm.
search
: Utilisez cette option pour rechercher dans le registre tous les packages contenant le texte fourni dans le troisième argument.
shrinkwrap
: En bref, cette commande vous permet de verrouiller des versions de dépendances spécifiques dans un package dans l'ordre, de sorte qu'un semver relâché ( gestion des versions sémantique ) numéro ne rompt pas le code de production.
star
: Aimez-vous vraiment un package que vous utilisez? Utilisez cette commande pour montrer votre appréciation directement depuis le terminal, qui se reflète ensuite sur la page du package dans le registre npm.
update
: Cela suit généralement le outdated
commande pour mettre à jour les packages obsolètes.
version
: Cela vous donne un raccourci pour déplacer le package.json
version, et faites une balise git tout en un.
Notez que la plupart de ces commandes peuvent prendre des sous-commandes et / ou des configurations, et cette liste n'est en aucun cas une discussion de bout en bout sur la CLI.
La configuration est une partie importante de npm, et il existe plusieurs façons de définir les variables de configuration.
Tout d'abord, la configuration peut être définie via la CLI à partir du terminal.
En général, cela ressemblerait à ceci: npm -- []
.
Si la valeur n'est pas spécifiée, l'option sera définie sur true par défaut.
Par exemple, supposons que vous travaillez sur un package npm limité (privé) et que vous décidez de le publier en tant que package public.
Cela se fait facilement en ajoutant --access=public
à votre publish
commander. Si nous ne spécifions pas que la propriété soit publique, la valeur par défaut serait restreinte (privée).
La configuration ajoutée à d'autres commandes comme celle-ci ne persiste pas partout, il peut donc devenir fastidieux de définir un tableau de configurations via la CLI.
Dans ces cas, il peut être préférable de définir la configuration à l'aide de variables d'environnement.
comment faire un jeton erc20
Toute variable d'environnement définie avec npm_config_
Le préfixe sera utilisé pour configurer npm.
Par exemple: export npm_config_registry=localhost:4321
définirait l'option de configuration du registre globalement, et lorsque npm est exécuté, il utilisera le registre npm situé sur localhost sur le port 4321.
Vous pouvez également définir les options de configuration à l'aide de la commande spéciale .npmrc
fichier, qui peut être défini à différents niveaux en fonction de vos besoins:
package.json
fichier, généralement path/to/project/.npmrc
~/.npmrc
$PREFIX/etc/npmrc
/path/to/npm/npmrc
.Paramètres de configuration dans le .npmrc
Le fichier peut être modifié et conservé à l'aide de l'interface de ligne de commande en exécutant une commande au format suivant: npm config set
.
Par exemple, vous pouvez exécuter npm config set access public
pour rendre publique la configuration de publication d'un package de portée (privé).
Par défaut, cette commande conserverait la configuration localement (la configuration au niveau utilisateur comme décrit ci-dessus), mais vous pouvez ajouter -g
pour le maintenir globalement.
Lorsqu'une configuration persistante doit avoir lieu au niveau du projet ou au niveau intégré, le .npmrc
Le fichier doit être modifié à l'aide d'un éditeur de texte.
Enfin, la configuration peut être définie à partir de package.json
fichier. Cependant, cela est rarement utilisé (et ne doit être utilisé que si cela est explicitement requis), car un niveau de projet .npmrc
file est le lieu traditionnellement préféré pour définir la configuration du package.
access
: Comme indiqué ci-dessus, il est utilisé pour définir les autorisations.
always-auth
: Il est important de noter que ce paramètre par défaut est false. Lorsqu'il est défini sur true, npm exigera toujours une authentification lors du contact avec le registre.
ca
: Par défaut, l'autorité de certification (CA) npm. Il peut être changé en null pour autoriser l'accès uniquement aux bureaux d'enregistrement connus, ou à un certificat d'autorité de certification spécifique pour n'accorder l'accès qu'à ce certificat spécifique. Ce paramètre, ainsi que cafile
, cert
et strict-ssl
, sont rarement utilisés, mais parlent de l'aspect sécurité et fiabilité de npm, ce qui permet d'avoir l'esprit tranquille en sachant que le paquet que vous installez provient de la source que vous attendez.
color
: La valeur par défaut est true, ce qui vous permet de rompre avec la morosité standard du terminal en colorant le stdout
cela est autorisé par les descripteurs de fichier tty. S'il est défini sur false, le terminal reste terne. Lorsqu'il est défini sur always
, il sort toujours en couleur.
depth
: Ce paramètre permet un contrôle granulaire sur ce que vous voyez avec les commandes récursives, telles que ls
et outdated
, en attribuant à quelle profondeur elles sont exécutées. Une valeur de 0 évaluera uniquement le premier niveau de dépendances tandis que l'infini (la valeur par défaut) entraînera l'évaluation de tous les niveaux de dépendances. L'exception à cette règle est lors de son utilisation avec outdated
; dans ce cas, l'infini est interprété comme 0 pour assurer une sortie plus pertinente.
dev
: Ceci est défini sur false par défaut, mais lorsqu'il est défini sur true (lors de l'exécution d'un npm install
), toutes les dépendances de développement dans le package.json
Le fichier sera installé avec les dépendances normales.
dry-run
: Lorsque ce paramètre est défini sur true, npm n'apportera aucune modification à votre package mais vous dira à la place ce qu'il aurait fait. Cela peut être très utile lors de l'exécution de certaines commandes, telles que dedupe
ou update
.
git-tag-version
: Il est défini sur true par défaut. Ce paramètre marque une version dans git lors de l'exécution de npm version
commander. Si vous utilisez npm comme gestionnaire de packages pour un grand projet qui a des versions balisées dans git, cela peut vous faire gagner du temps et n'oubliez pas de mettre à jour le package.json
fichier pour vous.
loglevel
: Par défaut, il est défini sur warn
, ce qui donne une sortie d'erreur et d'avertissement lors de l'exécution des commandes npm. Les autres paramètres incluent silent
, qui ne fournit aucune sortie; error
, qui enregistre uniquement les erreurs dans la sortie; http
, qui n'annonce que les erreurs de requête http; info
, pour vouloir une sortie informative); verbose
, qui enregistre presque tout; et silly
, qui, comme son nom l'indique, donne une quantité stupide de sortie et plus encore.
production
: Lorsque ce paramètre est défini sur true, npm agit en conséquence et exécute toutes les commandes en mode production. Cela signifie que le développement ou les dépendances facultatives ne seront pas installés, et aucune tâche liée au développement ne sera exécutée.
rollback
: Lorsqu'il est défini sur true, toutes les installations ayant échoué sont supprimées. Cela est pratique lorsqu'une installation de dépendances échoue. En fonction de votre niveau de journalisation, vous devriez être en mesure de voir quelles installations ont échoué, de les noter et d'exécuter le npm install
commande avec l'option de restauration définie sur true. Ensuite, avec vos notes et une installation à sec (comme décrit ci-dessus), vous pouvez ensuite déboguer le problème.
save : When installing a package directly from the registry, you can append
–save to the command which will add the installed package to the dependencies option in the
package.json file. For example,
npm install lodash` ajoutera du lodash à vos dépendances.
save-dev
: Similaire à l'option d'enregistrement de la configuration, ajoutez --save-dev
lors de l'installation d'un package, et il sera ensuite ajouté à l'option devDependencies dans le package.json
fichier.
save-optional
: Similaire à l'option d'enregistrement de la configuration, ajoutez --save-optional
lors de l'installation d'un package, et il sera ensuite ajouté à l'option optionalDependencies dans le package.json
fichier.
save-exact
: Lors de l'installation de packages, le save
, save-dev
et save-optional
les options modifient le package.json
en insérant le package installé dans sa propriété respective avec un opérateur de plage semver. Lors de l’invocation du paramètre de configuration ‘save-exact’ avec la valeur true, en conjonction avec l’un des paramètres mentionnés ci-dessus, un numéro de version spécifique est utilisé, ignorant la plage de semver.
dans quoi sont écrits les systèmes d'exploitation
save-prefix
: Ceci définit l'opérateur de plage semver lors de l'utilisation de save
, save-dev
ou save-optional
. La valeur par défaut est ^
, ce qui permet des mises à niveau mineures des packages lors de l'installation. Cela peut être défini sur n'importe quel opérateur de plage de semver préfixé valide.
tag-version-prefix
: La valeur par défaut conventionnelle est v
, spécifiant ce qui est ajouté à la version de la balise git lors de l'exécution de npm version
.
Vous pouvez également utiliser npm pour se mettre à jour.
Exécutez simplement npm install -g [email protected]
, et npm sera mis à jour vers la dernière version stable. Il est important de noter que chaque version de Node.js est livré avec une version spécifique de npm, et d'après mon expérience, vous ne devriez pas trop jouer avec cette association.
En fin de compte, ma recommandation est de s'en tenir à l'appariement tel qu'il est prévu.
Lorsque vous utilisez npm en tant qu'outil autonome, assurez-vous de comprendre les implications de l'utilisation de la version que vous choisissez. Il existe un excellent outil pour gérer différentes versions de Node.js (et donc les versions de npm) sur le même système appelé NVM .
Le package.json
Le fichier est l'élément crucial qui relie tout ensemble.
C'est une condition requise pour publier un package dans le registre npm, et c'est là que la partie gestion des dépendances prend vie.
Il comporte deux champs obligatoires, à savoir «nom» et «version», et ensemble ces propriétés doivent constituer un identifiant unique.
Le champ de nom doit respecter certaines règles, telles que définies par le documentation npm sur la dénomination , et le champ de version est soumis au spécificiations semver .
En plus de cela, vous pouvez avoir une liste de dépendances d'un mile de long, et définir une version spécifique à utiliser pour chacune d'elles, en utilisant les versions semver et les opérateurs de plage. Voici une liste d'autres propriétés notables.
«Main» définit le point d'entrée de votre application, par défaut index.js
. Selon la convention ou votre framework, il peut s'agir de app.js
ou main.js
. Vous pouvez, bien sûr, en faire ce que vous voulez.
C'est une propriété sous-estimée.
Premièrement, il peut être utilisé pour effectuer des tâches lors de la pré-publication.
Deuxièmement, il fournit un endroit où vous pouvez alias un tableau de commandes fréquemment utilisées, allant des tâches de construction (définies dans gulp ou grunt), au déclenchement de l'installation d'autres dépendances (avec quelque chose comme bower), au démarrage d'un serveur de développement avec webpack, ou exécuter un ensemble de commandes bash.
Logiciel de visualisation 3D open source
Cette propriété est une liste des packages nécessaires à votre application, ainsi que le numéro de semver compatible. C'est une propriété notable car elle peut être modifiée depuis le terminal lorsque vous installez des packages locaux.
Cela se fait en ajoutant --save
(ou le raccourci -S
) à la fin du npm install
commander.
Lorsque vous faites cela, le ou les packages nouvellement installés sont ajoutés à la liste des dépendances dans votre package.json
fichier.
De même, une dépendance peut également être supprimée en ajoutant --save
lors de l'exécution de npm uninstall
commander.
Il est important d'être conscient des modèles de version de semver de chacune des dépendances et de leur signification.
Si la règle semver est trop stricte, vous perdez de nouvelles fonctionnalités et améliorations, tandis que si la règle semver est trop assouplie, une version cassante d'un package peut être installée le long de la ligne.
Une installation de package cassée peut s'avérer assez difficile à résoudre, en particulier lorsque la version minifiée du package est utilisée.
Indépendamment de la propriété dependencies, la propriété «devDependencies» vous permet de définir des dépendances qui ne sont utilisées que pendant la phase de développement et qui ne sont pas requises pour la version de production (comme ESLint, les packages grunt-contrib et Protractor). Tout comme pour les dépendances, cette propriété peut être modifiée depuis le terminal en ajoutant --save-dev
(ou le raccourci -D
) à la fin du npm install
ou la commande npm uninstall
commander. La même mise en garde s'applique à la gestion des versions comme mentionné sous les dépendances.
C'est ici que vous pouvez spécifier le (s) fichier (s) exécutable (s) de votre package, comme le chemin vers un utilitaire CLI. Cette propriété indique à npm de créer des liens symboliques locaux ou globaux vers vos exécutables lorsque votre package est installé.
Comme indiqué précédemment, c'est ici que vous définissez les paramètres de configuration via votre package.json
fichier.
Lorsqu'il est défini sur true, npm refusera de publier le package.
comment obtenir powerpivot dans excel
Cela ne doit pas être confondu avec le paramètre de configuration d'accès.
Il s'agit d'un paramètre pratique lorsque vous avez un projet qui utilise npm avec son package.json
mais il n'est pas destiné à être publié dans le registre npm, qu'il soit limité ou public.
Si votre intention change, modifiez simplement le paramètre sur false et vous pourrez publier votre package.
Le package.json
Le fichier accepte également les propriétés personnalisées, tant que le nom n'est pas déjà défini ou réservé.
L'écosystème npm est rempli de packages, écrits par des milliers de développeurs différents à travers le monde. Chacun résout une sorte de problème, en fournissant une abstraction ou en présentant une implémentation de quelque chose.
Il y a de fortes chances que, à un moment donné, vous souhaitiez également développer votre propre package à partager.
Tout d'abord, vous devez créer un package.json
fichier avec les propriétés minimales requises de «nom» et «version», puis la propriété «main» pour spécifier le point d'entrée, par exemple index.js.
Écrivez votre code dans ce fichier index.js, connectez-vous avec votre compte d'utilisateur npm ou créez un nouvel utilisateur à partir du terminal, et vous êtes prêt à le publier dans le registre npm.
Les packages peuvent être publics ou privés.
Les packages publics sont gratuits et peuvent être utilisés par tous.
Les packages privés, appelés packages étendus, ne peuvent être publiés que si vous avez payé un utilisateur de modules privés, et ils peuvent être identifiés par le signe distinct @username/
qui est ajouté au nom du package.
Les packages de portée peuvent également être publiés publiquement en appelant le publish
commande avec --access=public
.
De plus, si vous passez un peu plus de temps à développer et à améliorer la base de code de votre package, et qu'il est temps qu'une nouvelle version soit publiée, vous modifiez simplement la version (selon les règles et la convention semver) du package dans le package.json
fichier et tapez npm publish
.
Vous pouvez également utiliser l'interface de ligne de commande et appeler npm version
, où update_type est soit patch
, minor
, ou major
, comme décrit par semver, et cela incrémente alors automatiquement le numéro de version dans le package.json
fichier.
Encore une fois, le documentation npm car c'est excellent, et il serait vain de simplement répéter leurs paroles.
Ce que l'on peut dire des organisations dans le contexte de npm, c'est qu'elles sont extrêmement fines et, lorsqu'elles sont gérées correctement, les grandes équipes et les individus, travaillant sur des packages étendus ou publics sous un seul nom, peuvent être très bien gérés et restreints.
Bien qu’il soit complexe à maîtriser, c’est très enrichissant.
En fin de compte, la documentation fournie par npm est complète et devrait être consultée pour plus de détails, mais cet article fournit un aperçu utile des fonctionnalités de base et plus avancées, impliquées, traduisant la génialité de npm.
Comme pour toutes choses, des opinions fortes existent et de nombreux défauts peuvent être trouvés. Mais si vous n'avez jamais essayé npm (ou node, d'ailleurs), plongez-vous et explorez-le par vous-même. Il y a de fortes chances que vous l'apprécierez plus que vous ne le pensez.
Pour des articles plus intéressants sur npm, pensez à lire Utilisation de Scala.js avec npm et Browserify .