998 votes

Différence entre npx et npm ?

Je viens juste de commencer à apprendre React, et Facebook aide à simplifier la configuration initiale en fournissant la projet prêt à l'emploi suivant .

Si je dois installer le projet squelette, je dois taper npx create-react-app my-app en ligne de commande.

Je me demandais pourquoi le Facebook de Github a npx create-react-app my-app plutôt que npm create-react-app my-app ?

52 votes

create-react-app est un générateur. npx va au internet en téléchargeant temporairement le paquet pour pouvoir l'exécuter ( np x ). Ce que vous obtenez (et voulez) est la sortie, qui est enregistrée localement, là où vous aviez exécuté la commande.

0 votes

1 votes

Ce post explique pourquoi utiliser les npx avec un exemple. thecodeframework.com/

1168voto

vsync Points 11280

Présentation de npx : un exécuteur de paquets npm

NPM - Gère paquets mais ne rend pas la vie facile exécution de n'importe lequel.

NPX - Un outil pour exécution de Paquets de nœuds.

NPX est fourni avec NPM version 5.2+

NPM n'exécute pas simplement un paquet. En fait, il n'exécute aucun paquet. Si vous souhaitez exécuter un paquet à l'aide de NPM, vous devez spécifier ce paquet dans le fichier package.json fichier.

Lorsque des exécutables sont installés via des paquets NPM, NPM établit des liens avec eux :

  1. local Les installations ont des "liens" créés à ./node_modules/.bin/ répertoire.
  2. mondial Les installations ont des "liens" créés à partir de la base de données globale de l'entreprise. bin/ (par exemple /usr/local/bin ) sous Linux ou à %AppData%/npm sur Windows.

Documentation à lire


NPM :

On peut installer un paquet localement sur un certain projet :

npm install some-package

Maintenant, disons que vous voulez que NodeJS exécute ce paquet à partir de la ligne de commande :

$ some-package

Ce qui précède échouer . Seulement installé dans le monde entier les paquets peuvent être exécutés en tapant leur nom uniquement .

Pour résoudre ce problème et faire en sorte qu'il s'exécute, vous devez saisir le chemin local :

$ ./node_modules/.bin/some-package

Techniquement, vous pouvez exécuter un paquetage installé localement en modifiant le fichier packages.json et en ajoutant ce paquet dans le fichier scripts section :

{
  "name": "whatever",
  "version": "1.0.0",
  "scripts": {
    "some-package": "some-package"
  }
}

Ensuite, exécutez le script en utilisant npm run-script (ou npm run ):

npm run some-package

NPX :

npx vérifiera si <command> existe dans $PATH ou dans les binaires du projet local, et l'exécuter. Ainsi, pour l'exemple ci-dessus, si vous souhaitez exécuter le paquetage installé localement some-package il suffit de taper :

npx some-package

Un autre principal l'avantage de npx est la possibilité d'exécuter un paquet qui n'a pas été préalablement installé :

$ npx create-react-app my-app

L'exemple ci-dessus générera un react modèle d'application sur le chemin d'accès dans lequel la commande a été exécutée, et vous permet de toujours utiliser la dernière version d'un générateur ou d'un outil de construction sans avoir à effectuer une mise à niveau à chaque fois que vous êtes sur le point de l'utiliser.


Exemple de cas d'utilisation :

npx peut être utile dans le script section d'un package.json fichier, lorsqu'il n'est pas souhaité de définir une dépendance qui pourrait ne pas être couramment utilisée ou pour toute autre raison :

"scripts": {
    "start": "npx gulp@3.9.1",
    "serve": "npx http-server"
}

Appelez avec : npm run serve


Questions connexes :

  1. Comment utiliser le paquet installé localement dans node_modules ?
  2. NPM : comment sourcer le dossier ./node_modules/.bin ?
  3. Comment exécuter un fichier js à l'aide de scripts npm ?

4 votes

Donc la réaction n'utilise pas node.js n'est-ce pas ? Pourquoi est-il disponible via 'npm' (le gestionnaire de paquets de node) ?

10 votes

Il y a quelques années, il y a eu Bower pour la gestion des paquets frontaux, mais son utilisation a considérablement diminué au profit de npm. Parmi les raisons, vous pouvez utiliser un seul gestionnaire de paquets pour tout ce qui concerne javascript, et vous pouvez utiliser les résolutions de commonjs pour développer des projets frontaux également. Vous pouvez consulter cette réponse pour plus de détails. En ce qui concerne react : non, il n'utilise pas directement node, bien que vous puissiez l'utiliser dans node aussi ! (par exemple : rendu côté serveur)

1 votes

@RecuencoJones - Vous avez commenté ma réponse au lieu de l'OP.

147voto

dww Points 307

npx est un exécuteur de paquets npm (x signifie probablement eXecute). L'utilisation typique est de télécharger et d'exécuter un paquet temporairement ou pour des essais.

create-react-app est un paquet npm qui ne devrait être exécuté qu'une seule fois dans le cycle de vie d'un projet. Par conséquent, il est préférable d'utiliser npx pour l'installer et l'exécuter en une seule étape.

Comme indiqué sur la page principale https://www.npmjs.com/package/npx , npx peut exécuter des commandes dans le PATH ou à partir de node_modules/.bin par défaut.

Note : En creusant un peu, nous pouvons trouver que create-react-app pointe vers un fichier Javascript (probablement vers /usr/lib/node_modules/create-react-app/index.js sur les systèmes Linux) qui est exécuté dans l'environnement node. Il s'agit simplement d'un outil global qui effectue quelques vérifications. La configuration réelle est faite par react-scripts, dont la dernière version est installée dans le projet. Voir https://github.com/facebook/create-react-app pour plus d'informations.

5 votes

L'utilisation typique est tout aussi souvent d'exécuter la version déjà installée localement ou globalement que de télécharger et d'exécuter un paquet.

120voto

cherankrish Points 1

NPM est un gestionnaire de paquets, vous pouvez installer des paquets node.js en utilisant NPM.

NPX est un outil permettant d'exécuter des paquets node.js.

Il importe peu que vous ayez installé ce paquet globalement ou localement. NPX l'installera temporairement et l'exécutera. NPM peut également exécuter des paquets si vous configurez un fichier package.json et l'incluez dans la section script.

Retenez donc ceci : si vous voulez vérifier/exécuter rapidement un paquet de nœuds sans l'installer localement ou globalement, utilisez NPX.

np M - Directeur

np X - Exécuter - facile à retenir

10 votes

Pouvez-vous développer un peu sur le "temporairement". Voulez-vous dire que les binaires sont jetés après l'exécution de la commande, ce qui oblige npx à retélécharger les binaires ? chaque temps ?

4 votes

@JimAho Oui. npx va retélécharger le paquet et ses dépendances à chaque fois. Si les performances sont un facteur, vous pourriez vouloir installer le paquet et l'exécuter avec autre chose que npx. (ex. : npm run my-package)

0 votes

Je pense que "temporairement" signifie que l'auteur du paquet ne veut pas que les utilisateurs sachent où le paquet est installé et qu'ils le réutilisent ensuite encore et encore, parce que le paquet peut avoir besoin d'être mis à jour pendant la nuit...

69voto

Reegan Points 131

npx exécute une commande d'un paquet sans l'installer explicitement.

Cas d'utilisation :

  • Vous ne voulez pas installer les paquets ni globalement ni localement.
  • Vous n'avez pas la permission de l'installer globalement.
  • Je veux juste tester quelques commandes.
  • Parfois, vous voulez avoir une commande script (générer, convertir quelque chose, ...) en package.json pour exécuter quelque chose sans installer ces paquets comme dépendances du projet.

Syntaxe :

npx [options] [-p|--package <package>] <command> [command-arg]...

L'emballage est facultatif :

npx   -p uglify-js         uglifyjs --output app.min.js app.js common.js
      +----------------+   +--------------------------------------------+
      package (optional)   command, followed by arguments

Par exemple :

Start a HTTP Server      : npx http-server
Lint code                : npx eslint ./src
                         # Run uglifyjs command in the package uglify-js
Minify JS                : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS               : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML              : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports      : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

En savoir plus command :

52voto

Venkat Ch Points 210

NPX :

De https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/ :

Les développeurs web peuvent avoir des dizaines de projets sur leur développement, et chaque projet a son propre ensemble de dépendances installées par npm installées par npm. Il y a quelques années, les conseils habituels pour gérer l'application CLI comme Grunt ou Gulp consistait à les installer localement dans chaque chaque projet et de les installer globalement pour qu'elles puissent être facilement de commande.

Mais l'installation globale a causé autant de problèmes qu'elle en a résolu. Les projets peuvent dépendre de différentes versions des outils de ligne de commande, et polluer le le système d'exploitation avec de nombreux outils CLI spécifiques au développement n'est pas génial non plus. Aujourd'hui, la plupart des développeurs préfèrent installer les outils localement et s'en tenir là.

Les versions locales des outils permettent aux développeurs de tirer des projets de GitHub sans se préoccuper des incompatibilités avec les outils installés globalement. d'outils installés globalement. NPM peut simplement installer les versions locales et vous pouvez d'aller. Mais les installations spécifiques à un projet ne sont pas sans problèmes : comment exécuter la bonne version de l'outil sans spécifier son sans spécifier son emplacement exact dans le projet ou jouer avec des alias ? aliases ?

C'est le problème que npx résout. Un nouvel outil inclus dans NPM 5.2, npx est un petit utilitaire qui est assez intelligent pour exécuter la bonne application quand lorsqu'il est appelé à l'intérieur d'un projet.

Si vous voulez exécuter la version locale du projet de mocha, par exemple, vous pouvez exécuter npx mocha à l'intérieur du projet et il fera ce que vous attendez.

Un avantage secondaire utile de npx est qu'il installera automatiquement npm qui ne sont pas déjà installés. Ainsi, comme le créateur de l'outil, Kat Marchán, vous pouvez exécuter npx benny-hill sans avoir à vous soucier de la pollution de avec Benny Hill polluant l'environnement global.

Si vous voulez prendre npx pour un tour, mettez à jour la version la plus récente de de npm.

1 votes

Si vous utilisez nvm-Windows, vous n'obtiendrez probablement pas npx avec npm, mais devrez l'installer manuellement ! npm i -g npx

2 votes

NPM can just install local versions - pas correct. npm peut installer un système global et c'est une pratique courante.

1 votes

Une excellente introduction à NPX peut être trouvée ici : medium.com/@maybekatz/ par Kat Marchán.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X