Skip to content

Instantly share code, notes, and snippets.

@yannickcr
Created November 20, 2014 23:19
Show Gist options
  • Save yannickcr/7b019fddea2df4e5aa84 to your computer and use it in GitHub Desktop.
Save yannickcr/7b019fddea2df4e5aa84 to your computer and use it in GitHub Desktop.
Gestion des dépendances avec npm

Gestion des dépendances avec npm

Node.js Paris, 20 Novembre 2014


Les différents types de dépendances

Project
├── dependencies
├── devDependencies
├── peerDependencies
├── optionalDependencies
└── bundledDependencies

dependencies

  • Modules dont votre application a besoin pour fonctionner
  • Sont déployés en production avec votre application

{
  "dependencies": {
    "json-string": "^5.0.0",
    "mime-types": "^1.0.1",
    "node-uuid": "^1.4.0"
  }
}

devDependencies

  • Modules requis pour le développement sur votre application:
    • Task runner
    • Tests
    • Outils de debuggage
  • N'est pas déployé en production

{
  "devDependencies": {
    "eslint": "^0.9.2",
    "mocha": "2.0.1"
  }
}

optionalDependencies

  • Dépendances non essentielles pour l'application
  • Peuvent être absentes de différentes plateformes (ex: windows)
  • Chargement et utilisation à conditionner dans l'application

{
  "optionalDependencies": {
    "dtrace-provider": "^0.3.1"
  }
}

peerDependencies

  • Equivalent à dependencies sauf que...
  • Ces dépendances sont installées au même niveau que le module les requérants

Ce qui entraine des problèmes...


grulp-sass

{
  "peerDependencies": {
    "grulp": "~1.0.0"
  }
}

grulp-jshint

{
  "peerDependencies": {
    "grulp": "^1.0.0"
  }
}

  • Peut entrainer des conflits de dépendances, ce dont était exempt npm grâce à son dependency tree
  • Est en court de dépréciation #6565

bundledDependencies

  • Spécifie les dépendances à packager avec votre module
  • Utilisé lors du packaging, donc seulement utile si vous publiez vos modules sur un registre (npm ou registre interne)
  • Peut servir à:
    • Utiliser une version modifiée d'une dépendance (c'est mal !)
    • Accélérer le déploiement de vos applications

{
  "dependencies": {
    "json-string": "^5.0.0",
    "mime-types": "^1.0.1",
    "node-uuid": "^1.4.0"
  },
  "bundledDependencies": [
    "json-string"
  ]
}

Semver

X.Y.Z
│ │ └── Patch: Bugfix
│ │
│ └──── Minor: New feature
│
└────── Major: Breaking change

The spec: semver.org

A comprehensive guide: semver-ftw.org


Bad

"grulp": "*"      // latest
"grulp": ">=2"    // at least 2.0.0

Good

"grulp": "^2.0.0" // at least 2.0.0 and below 3.0.0
"grulp": "~2.0.0" // at least 2.0.0 and below 2.1.0
"grulp": "2.0.0"  // only the 2.0.0

Better

npm shrinkwrap

  • Vérouille l'arbre des dépendances complet.
  • Moyen le plus sûr pour toujours avoir les mêmes dépendances d'une installation à l'autre

Gérer la mise à jour des dépendances


Bonus: Repository npm privé

Sinopia: private/caching npm repository server

https://github.com/rlidwka/sinopia

  • Gérer ses modules internes aussi facilement que les modules tiers
  • Mise en cache local des modules publics
    • Installations plus rapides
    • Evite d'être bloqué si le registre npm est down

Merci

Des questions ?


@yannickc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment