87 votes

À l’aide du Musée pour installer ou mettre à jour les paquets nécessaires à l’instar de bundler pour rubygems

J'aime Bundler, il est excellent à la gestion de la dépendance. J'aime mnp, l'installation de nœud de paquets, c'est facile! J'ai une application nodejs et aimerais être en mesure de préciser mes applications dépendances et facilement installer / mettre à jour où que je déployer mon application. Ce n'est pas une bibliothèque, je suis relâchant, c'est un à part entière de la web-app.

Je suis conscient de l' npm bundle de commande, mais il semble tout simplement tout simplement remplacer le répertoire dans lequel les paquets sont installés.

Je suis habitué à utiliser le système de regroupement de cette manière:

# Gemfile
gem "rails", "3.0.3"

Installe les rails de la v3.0.3 et tout les autres pierres précieuses sur la machine hôte seulement si il n'existe pas déjà

> bundle install

Comment puis-je obtenir quelque chose de similaire avec la ngp?

147voto

isaacs Points 6050

Comme de npm 1.0 (qui est maintenant ce que vous obtenez par défaut si vous suivez les étapes décrites dans le fichier README), "bundle" n'est plus un lieu de ségrégation chose, c'est juste "comment ça marche".

Donc:

  1. Mettre un paquet.fichier json à la racine de votre projet
  2. Liste de vos deps dans ce fichier

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install Puisque vous êtes à l'appel de cette sans arguments, et non pas en mode global, il vous suffit d'installer tous vos deps localement.

  4. require("express") et d'être heureux.

10voto

Daniel Beardsley Points 6802

Edit: Ceci s'applique uniquement aux mnp versions < 1.0

Il était assez difficile de comprendre cela, mais MNP rend cela possible.

Vous aurez besoin de trois composantes

  1. Un sous-répertoire dans votre référentiel (c - deps/)
  2. Un package.json le fichier dans le répertoire ci-dessus que les listes de dépendances
  3. Un index.js le fichier dans le répertoire ci-dessus qui a besoin de vos dépendances

Exemple

Imaginez que l' express est votre seule dépendance

deps/paquet.json

remarque: Incrémenter le numéro de 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
}

Maintenant, vous devriez être en mesure d'installer vos dépendances à l'aide de mnp. Vous pourriez même faire cette partie de votre processus de déploiement

cd deps
npm install

Puis à l'intérieur de votre code d'application, vous pouvez obtenir l'accès à votre version de express comme ceci:

var express = require('myapp_dependencies').express;

5voto

Alfred Points 32190

Vous devriez lire ces deux articles de Isaacs(auteur mnp) blog. Je pense qu'ils sont vraiment bons, et je crois que vous dire comment faire pour 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 #11) explique ceci:

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

Lorsque vous utilisez le npm commande de groupement, la ngp va mettre tous les vos dépendances dans le dossier node_modules dans votre forfait. Mais il ne s'arrête pas là.

Si vous voulez dépendent de quelque chose ce n'est pas sur le registre, vous pouvez le faire qu'. Faites simplement ceci:

npm bundle install http://github.com/whoever/whatever/tarball/master Cela permettra d'installer le contenu de ce tarball dans le paquet, et puis vous peut énumérer comme une dépendance, et il ne pas essayer de l'installer lors de votre installation du paquet.

C'est aussi pratique si vous avez votre fourchette de quelque chose, et serait préfèrent ne pas changer le nom.

En fait, vous pouvez exécuter presque n'importe quel npm commande à l'ensemble. Pour voir ce qui est à l'intérieur, vous pouvez faire mnp faisceau de ls. Pour supprimer quelque chose, ne le mnp bundle rm chose. Et, bien sûr, vous pouvez installer plusieurs versions et activer l'un vous voulez.

2voto

Trevor Burnham Points 43199

Il me semble que la solution la plus simple est d'utiliser un package.json le fichier avec l' private drapeau (ajouté à npm mois dernier) true. De cette façon, vous pouvez exécuter npm install ou npm bundle "pour saisir votre projet de dépendances, mais vous empêcher quiconque de accidentellement la publication de votre non-public du projet.

Voici un exemple package.json:

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

L'exécution npm install installera express sur le système local si elles n'existent pas déjà; l'exécution d' npm publish donne une erreur à cause de l' "private": true.

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

2voto

Colonel Panic Points 18390

Que du mécanisme national de prévention de la version 1.1.2 , il y a une nouvelle commande npm shrinkwrap ce qui crée un npm-shrinkwrapped.json le fichier, analogue à l' Gemfile.lock. Il est important de faire, afin d'éviter de logiciels de la pourriture (voir Bundler de la justification). En particulier, comme Nodejs a un mouvement rapide de la communauté.

Alors qu' bundle install crée un Gemfile.lock automatiquement, npm install de ne pas créer npm-shrinkwrapped.json (mais que quand elle existe). Par conséquent, vous devez vous rappeler d'utiliser npm shrinkwrap.

Lire l'intégralité d'un guide à http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/

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