web-dev-qa-db-fra.com

Utilisation de npm pour installer ou mettre à jour les packages requis, tout comme pour Bundler for Rubygems

J'aime Bundler , c'est excellent pour la gestion des dépendances. J'aime npm , installer des paquets de noeuds est facile! J'ai une application nodejs et j'aimerais pouvoir pouvoir spécifier les dépendances de mes applications et les installer/les mettre à jour facilement partout où je déploie mon application. Ce n'est pas une bibliothèque que je publie, c'est une application web à part entière.

Je suis au courant du npm bundle _ commande, mais cela semble simplement remplacer le répertoire dans lequel les packages sont installés.

Je suis habitué à utiliser bundler de cette façon:

# Gemfile
gem "Rails", "3.0.3"

Installe Rails v3.0.3 et tout autre gem requis sur la machine hôte uniquement s'il n'existe pas déjà

> bundle install

Comment puis-je obtenir quelque chose de similaire avec npm?

86
Daniel Beardsley

À partir de npm 1.0 (ce qui est maintenant ce que vous obtenez par défaut si vous suivez les étapes du fichier README)], "bundle" n'est plus une chose séparée - c'est simplement "comment ça marche" ".

Alors:

  1. Placez un fichier package.json À la racine de votre projet
  2. Listez vos deps dans ce fichier

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install Puisque vous appelez ceci sans argument et non en mode global, il ne vous reste plus qu'à installer tous vos dépôts localement.

  4. require("express") et soyez heureux.
145
isaacs

Edit: Ceci ne s'applique qu'aux versions npm <1.0


C'était assez difficile à comprendre, mais NPM rend cela possible .

Vous avez besoin de trois composants

  1. Un sous-répertoire dans votre référentiel (c.-à-d. deps/)
  2. UNE package.json fichier dans le répertoire ci-dessus qui répertorie les dépendances
  3. Un index.js fichier dans le répertoire ci-dessus qui nécessite vos dépendances

Exemple

Imaginez que express est votre seule dépendance

deps/package.json

note: Incrémenter la version chaque fois que vous modifiez les dépendances

{
  "name": "myapp_dependencies",
  "version": "0.0.1",
  "engines": {
    "node": "0.4.1"
  },
  "dependencies":{
    "express": "2.0.0beta2"
  }
}

deps/index.js

export.modules = {
  express: require('express')
  //add more
}

Vous devriez maintenant pouvoir installer vos dépendances à l’aide de npm. Vous pourriez même faire de cette partie de votre processus de déploiement

cd deps
npm install

Ensuite, dans le code de votre application, vous pouvez accéder à votre version spécifique d’express comme ceci:

var express = require('myapp_dependencies').express;
10
Daniel Beardsley

Vous devriez lire ces deux articles du blog Isaacs (author npm). Je pense qu'ils sont vraiment bons, et je crois vous dire comment atteindre votre objectif:

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. http://foohack.com/2010/08/intro-to-npm/

Je crois que le lien n ° 1 (point n ° 11) explique ceci:

11: regroupez toutes vos dépendances dans le paquet lui-même

Lorsque vous utilisez la commande npm bundle, npm place toutes vos dépendances dans le dossier node_modules de votre package. Mais cela ne s’arrête pas là.

Si vous voulez dépendre de quelque chose qui ne figure pas dans le registre, vous pouvez le faire. Faites juste ceci:

npm bundle install http://github.com/whoever/w Whatever/tarball/master Ceci installera le contenu de cette archive dans le bundle, et vous pourrez ensuite le lister comme dépendance, et le gagnant N'essayez pas de l'installer quand votre paquet est installé.

Ceci est également pratique si vous avez votre propre fourchette de quelque chose et préférez ne pas changer le nom.

En fait, vous pouvez exécuter presque toutes les commandes npm sur le bundle. Pour voir ce qu’il contient, vous pouvez faire npm bundle ls. Pour supprimer quelque chose, npm bundle rm thing. Et, bien sûr, vous pouvez installer plusieurs versions et activer celle de votre choix.

5
Alfred

Il me semble que la solution la plus simple consiste à utiliser un package.json fichier avec le drapeau private (ajouté à npm le mois dernier) défini sur true. De cette façon, vous pouvez exécuter npm install ou npm bundle saisir les dépendances de votre projet, mais vous empêchez toute personne de publier accidentellement votre projet non public.

Voici un exemple package.json:

{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}

Fonctionnement npm install installera express sur le système local s’il n’existe pas déjà; fonctionnement npm publish donne une erreur à cause du "private": true.

Vous et votre équipe pouvez utiliser la balise de version en interne pour suivre les changements de dépendance au fil du temps - chaque fois que vous modifiez une dépendance, modifiez la version. Pour voir quelle version vous avez installée, utilisez npm ls installed.

2
Trevor Burnham

A partir de la version 1.1.2 de Npm, une nouvelle commande npm shrinkwrap crée un fichier npm-shrinkwrapped.json, Analogue à Gemfile.lock. Il est important d'en créer un pour éviter la pourriture des logiciels (voir justification de Bundler ). D'autant que Nodejs a une communauté qui bouge très vite.

Alors que bundle install Crée automatiquement un Gemfile.lock, npm install Ne créera pas npm-shrinkwrapped.json (Mais l'utilisera s'il existe). Par conséquent, vous devez vous rappeler d'utiliser npm shrinkwrap.

Lisez le guide complet sur http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/

2
Colonel Panic

Publiez également votre application avec npm et répertoriez ses dépendances dans votre fichier package.json.

Quand quelqu'un utilise npm pour installer votre paquet, npm se chargera de résoudre ses dépendances.

Spéc. De paquets: http://wiki.commonjs.org/wiki/Packages/1.

1
Dan Grossman