Question

I love Bundler , il est grand à la gestion des dépendances. J'adore NPM , l'installation de paquets de nœuds est facile! J'ai une application nodejs et aimerais être en mesure de préciser mes applications et dépendances facilement installer / mettre à jour où mon application, je déploie. Ce n'est pas une bibliothèque je publie, il est une application web à part entière.

Je suis au courant de la commande npm bundle, mais tout semble simplement remplacer le répertoire où les paquets sont installés.

Je suis habitué à l'utilisation Bundler de cette façon:

# Gemfile
gem "rails", "3.0.3"

Installe rails v3.0.3 et toutes les autres pierres précieuses nécessaires sur la machine hôte que si elle n'existe pas

> bundle install

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

Était-ce utile?

La solution

de NPM 1.0 (qui est maintenant ce que vous obtenez par défaut si vous suivez les étapes dans le fichier README), « paquet » n'est plus une chose séparée -. Il est juste « comment cela fonctionne »

  1. Mettez un fichier package.json dans la racine de votre projet
  2. Liste vos DEPS dans ce fichier

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install Puisque vous appelez cela sans args, et non en mode global, il vous reste plus qu'à installer tous vos DEPS localement.

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

Autres conseils

Edit: Ceci ne concerne que les versions de NPM <1,0


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

Vous avez besoin de trois composants

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

Exemple

Imaginez que exprimer 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
}

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

cd deps
npm install

Ensuite, au sein de votre code de l'application, vous pouvez accéder à votre version spécifique expresse comme ceci:

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

Vous devriez lire ces deux articles de Isaacs (auteur NPM) blog. Je pense qu'ils sont vraiment bons, et je crois que 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 lien # 1 (point n ° 11) explique ceci:

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

Lorsque vous utilisez la NPM commande bundle, NPM mettra tout vos dépendances dans la node_modules dossier dans votre package. Mais il ne se arrête pas là.

Si vous voulez compter sur quelque chose ce n'est pas sur le registre, vous pouvez faire cette. Il suffit de faire ceci:

paquet NPM installer http://github.com/whoever/whatever/tarball/master Cela installera le contenu de ce tarball dans le faisceau, puis vous peut énumérer comme une dépendance, et ne sera pas essayer de l'installer lorsque votre package est installé.

si vous avez Ceci est également à portée de main votre posséder une fourchette de quelque chose, et serait préfèrent ne pas changer le nom.

En fait, vous pouvez exécuter presque tous les NPM commander à l'ensemble. Pour voir ce qui est à l'intérieur, vous pouvez le faire ls bundle MNP. À quelque chose supprimer, ne liez NPM rm chose. Et, bien sûr, vous pouvez installer plusieurs versions et activer une vous voulez.

de la version 1.1.2 Npm, il y a une nouvelle commande npm shrinkwrap qui crée un fichier npm-shrinkwrapped.json , analogue à Gemfile.lock. Il est important de faire un, pour prévenir la pourriture du logiciel (voir justification Bundler ). D'autant plus que NodeJS a une communauté en mouvement rapide.

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

Lire un guide complet à http: //blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/

Il me semble que la solution la plus simple est d'utiliser un fichier package.json avec le drapeau de private (ajouté à NPM mois dernier) mis à true. De cette façon, vous pouvez exécuter npm install ou npm bundle pour saisir les dépendances de votre projet, mais vous empêcher quiconque 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
}

Running npm install installera express sur le système local si elle n'existe pas; en cours d'exécution npm publish donne une erreur à cause de la "private": true.

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

Publiez votre application avec npm ainsi, et la liste de ses dépendances dans votre fichier package.json.

Quand quelqu'un utilise npm pour installer votre package, npm prendra soin de résoudre ses dépendances.

Forfaits spec: http://wiki.commonjs.org/wiki/Packages/1.0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top