J'adore Bundler , c'est génial pour la gestion des dépendances. J'adore npm , installer des packages de nœuds est facile! J'ai une application nodejs et j'aimerais pouvoir spécifier les dépendances de mes applications et les installer / 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 connais la npm bundle
commande, mais cela semble simplement remplacer le répertoire où les packages sont installés.
J'ai l'habitude d'utiliser bundler de cette façon:
# Gemfile
gem "rails", "3.0.3"
Installe les rails v3.0.3 et toutes les autres gemmes requises sur la machine hôte uniquement si elles n'existent pas déjà
> bundle install
Comment puis-je réaliser quelque chose de similaire avec npm?
javascript
dependencies
node.js
bundler
npm
Daniel Beardsley
la source
la source
Réponses:
Depuis npm 1.0 (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 juste "comment ça marche".
Alors:
package.json
fichier à la racine de votre projetListez vos déps dans ce fichier
npm install
Puisque vous appelez cela sans argument, et pas en mode global, il installera simplement tous vos deps localement.require("express")
et soyez heureux.la source
your_app/node_modules
répertoire local en un lien symbolique en dehors de votre répertoire d'application. Vous ne voulez pas avoir à télécharger, créer et installer chaque dépendance à chaque fois que vous déployez.my-project
dans./node_modules/my-project/node_modules
. Je ne sais pas s'il existe un moyen pratique d'installer toutes les dépendances dans./node_modules
Anyone?Edit: Cela s'applique uniquement aux versions npm <1.0
C'était assez difficile à comprendre, mais NPM rend cela possible .
Vous avez besoin de trois composants
deps/
)package.json
fichier dans le répertoire ci-dessus qui répertorie les dépendancesindex.js
fichier dans le répertoire ci-dessus qui nécessite vos dépendancesExemple
Imaginez que l' express soit votre seule dépendance
deps / package.json
remarque: incrémentez le numéro de version à chaque fois que vous modifiez les dépendances
deps / index.js
Vous devriez maintenant pouvoir installer vos dépendances en utilisant npm. Vous pouvez même intégrer cette partie de votre processus de déploiement
Ensuite, dans le code de votre application, vous pouvez accéder à votre version spécifique d'express comme ceci:
la source
require('express')
dans deps / index.js n'importerait-il pas simplement la dernière version express, et pas nécessairement celle que nous avons installée? Je suis un noob nodeJS alors s'il vous plaît, soyez avec moi.npm install
, il ajoute des liens symboliques dans le répertoire de votre package installé vers les versions correctes des packages dépendants. Lorsque votre package de dépendances est requis, lerequire('express')
vérifie d'abord le répertoire local et trouve le lien symbolique vers la version correcte d'express.Vous devriez lire ces deux articles du blog Isaacs (auteur npm). Je pense qu'ils sont vraiment bons et je crois qu'ils vous disent comment atteindre votre objectif:
Je crois que le lien n ° 1 (point n ° 11) explique ceci:
la source
npm bundle
est utilisé pour collecter toutes vos dépendances dans un répertoire spécifique autre que celui par défaut. Je vais probablement proposer ma propre solution qui fonctionne de la même manière quebundle install
(bundler
pour ruby)npm
version 1.0+,npm bundle
a été supprimée. Au lieu de cela, utilisez simplement lanpm install
commande sans nom de package, elle lira le package.json et affichera les packages requis.À partir de la version 1.1.2 de Npm, il existe une nouvelle commande
npm shrinkwrap
qui crée unnpm-shrinkwrapped.json
fichier, analogue àGemfile.lock
. Il est important d'en créer un, pour éviter la pourriture des logiciels (voir la justification de Bundler ). D'autant que Nodejs a une communauté aussi rapide.Bien que
bundle install
crée unGemfile.lock
automatiquement,npm install
ne créera pasnpm-shrinkwrapped.json
(mais l'utilisera lorsqu'il existe). Par conséquent, vous devez vous rappeler d'utilisernpm shrinkwrap
.Lisez un guide complet sur http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
la source
Il me semble que la solution la plus simple est d'utiliser un
package.json
fichier avec l'private
indicateur (ajouté à npm le mois dernier) défini surtrue
. De cette façon, vous pouvez exécuternpm install
ounpm bundle
récupérer les dépendances de votre projet, mais vous empêchez quiconque de publier accidentellement votre projet non public.Voici un exemple
package.json
:Running
npm install
s'installeraexpress
sur le système local s'il n'existe pas déjà; l'exécutionnpm publish
donne une erreur à cause du"private": true
.Vous et votre équipe pouvez utiliser la balise de version en interne pour suivre les modifications de dépendance au fil du temps. Chaque fois que vous modifiez une dépendance, augmentez la version. Pour voir quelle version vous avez installée, utilisez
npm ls installed
.la source
true
et que cela ne fonctionne que parce que les chaînes sont des valeurs de vérité (c'est-à-dire!!"false" === true
).Publiez votre application avec
npm
et répertoriez ses dépendances dans votre fichier package.json.Lorsque quelqu'un utilise
npm
pour installer votre package,npm
se chargera de résoudre ses dépendances.Spécifications des packages: http://wiki.commonjs.org/wiki/Packages/1.0
la source
npm
pour installer avant d'installer votre application. Je ne pense pas qu'il y ait d'autregem
équivalent pour node.js.