1
|
# RFC: Registre NPM EOLE - Guide d'utilisation
|
2
|
|
3
|
## Rappel: les commandes de base du client NPM
|
4
|
|
5
|
Toutes ces commandes sont à exécuter à la racine du projet
|
6
|
|
7
|
### Créer le manifeste NPM: `npm init`
|
8
|
|
9
|
**Exemple**
|
10
|
```shell
|
11
|
my-project$ npm init
|
12
|
|
13
|
This utility will walk you through creating a package.json file.
|
14
|
It only covers the most common items, and tries to guess sensible defaults.
|
15
|
|
16
|
See `npm help json` for definitive documentation on these fields
|
17
|
and exactly what they do.
|
18
|
|
19
|
Use `npm install <pkg> --save` afterwards to install a package and
|
20
|
save it as a dependency in the package.json file.
|
21
|
|
22
|
Press ^C at any time to quit.
|
23
|
name: (my-project) my-project
|
24
|
version: (1.0.0) 0.0.0
|
25
|
description: Mon projet de développement
|
26
|
entry point: (index.js)
|
27
|
test command:
|
28
|
git repository: ssh://git@dev-eole.ac-dijon.fr/...
|
29
|
keywords: tag1, tag2
|
30
|
author: Équipe EOLE <eole@ac-dijon.fr>
|
31
|
license: (ISC) CECILL-2.0
|
32
|
About to write to /path/to/my-project/package.json:
|
33
|
|
34
|
{
|
35
|
"name": "my-project",
|
36
|
"version": "0.0.0",
|
37
|
"description": "Mon projet de développement",
|
38
|
"main": "index.js",
|
39
|
"directories": {
|
40
|
"test": "test"
|
41
|
},
|
42
|
"dependencies": {},
|
43
|
"devDependencies": {},
|
44
|
"scripts": {
|
45
|
"test": "echo \"Error: no test specified\" && exit 1"
|
46
|
},
|
47
|
"repository": {
|
48
|
"type": "git",
|
49
|
"url": "ssh://git@dev-eole.ac-dijon.fr/..."
|
50
|
},
|
51
|
"keywords": [
|
52
|
"tag1",
|
53
|
"tag2"
|
54
|
],
|
55
|
"author": "Équipe EOLE <eole@ac-dijon.fr>",
|
56
|
"license": "CECILL-2.0"
|
57
|
}
|
58
|
|
59
|
|
60
|
Is this ok? (yes) yes
|
61
|
```
|
62
|
|
63
|
### Chercher un paquet sur le registre: `npm search <nom_paquet>`
|
64
|
|
65
|
**Exemple**
|
66
|
```shell
|
67
|
my-project$ npm search jquery
|
68
|
npm WARN notice update to the newest npm client for improved search results: npmjs.com/get-npm
|
69
|
NAME DESCRIPTION AUTHOR DATE VERSION KEYWORDS
|
70
|
@mizchi/jquery-ui A curated set of user interface interactions, effects,… =mizchi 2016-06-09 1.11.4
|
71
|
blueimp-file-upload File Upload widget with multiple file selection, drag&drop… =blueimp 2017-03-28 9.18.0
|
72
|
cheerio Tiny, fast, and elegant implementation of core jQuery… =mattmueller… 2017-07-02 1.0.0-rc.2
|
73
|
conventional-changelog-jquery conventional-changelog jquery preset =bcoe =stevemao… 2016-04-17 1.1.1
|
74
|
cropper A simple jQuery image cropping plugin. =fengyuanchen 2017-07-07 3.0.0-rc.3
|
75
|
eslint-config-jquery jQuery eslint config =markelog 2017-03-11 1.0.1
|
76
|
extend Port of jQuery.extend for node.js and the browser =justmoon =ljharb 2017-04-28 3.0.1
|
77
|
gmap3 jQuery plugin to generate Google Maps =jbdemonte 2016-12-03 7.2.0
|
78
|
intl-tel-input A jQuery plugin for entering international telephone numbers =jackocnr 2017-07-01 11.1.0
|
79
|
jqtree Tree widget for jQuery =marcobraak 2017-06-05 1.4.1
|
80
|
jquery JavaScript library for DOM operations =dmethvin =mgol… 2017-03-20 3.2.1
|
81
|
jQuery jQuery: The Write Less, Do More, JavaScript Library… =coolaj86 =treasonx… 2012-07-01 1.7.4
|
82
|
```
|
83
|
|
84
|
## Configuration des projets de développement
|
85
|
|
86
|
Afin que les projets EOLE utilisent le registre NPM local, les développeurs doivent ajouter à la racine du répertoire racine des projets un fichier `.npmrc` contenant:
|
87
|
|
88
|
```ini
|
89
|
registry=http://<hote_registre_eole>:<port>/
|
90
|
```
|
91
|
|
92
|
Ce fichier devrait être ajouté dans l'historisation Git.
|
93
|
|
94
|
## Partage des composants via le registre
|
95
|
|
96
|
1. S'identifier sur le registre NPM local
|
97
|
|
98
|
```shell
|
99
|
my-project$ npm login
|
100
|
Username: <login>
|
101
|
Password: <password>
|
102
|
Email: (this IS public) <email>
|
103
|
Logged in as wpetit on http://<hote_registre_eole>:<port>/.
|
104
|
```
|
105
|
2. Publier votre nouvelle version de votre module
|
106
|
```shell
|
107
|
my-project$ npm publish
|
108
|
+ my-project@<version>
|
109
|
```
|
110
|
|
111
|
> **Gestion des versions**
|
112
|
> NPM utilise le modèle [semantic versioning](http://semver.org/) pour la publication des modules. Il est impossible d'écraser une version déjà existantes. Seule la montée de version est autorisées.
|
113
|
|
114
|
|
115
|
## Politique de gestion des dépendances dans les projets
|
116
|
|
117
|
Par défaut, lors d'une installation d'un nouveau module le client NPM tend à suivre SemVer de manière aveugle. Il part du principe qu'un changement de version mineure d'une dépendance ne devrait pas mettre en péril la stabilité du projet. Dans les faits, cette présomption n'est pas toujours vérifiée.
|
118
|
|
119
|
Afin d'éviter tout problème lors de la création/publication des paquets, l'équipe doit "fixer" l'état des dépendances.
|
120
|
|
121
|
Pour ce faire, le client NPM met à disposition la commande `npm shrinkwrap` qui permet de générer un manifeste contenant les numéros de version exacts des dépendances installées (et donc vérifiées par le développeur). Si le client détecte la présence de ce manifeste lors d'une installation (via `npm install`), il fera le nécessaire pour récupérer les versions exactes des dépendances telles que décrites par le manifest
|
122
|
|
123
|
**Exemple**
|
124
|
```shell
|
125
|
my-project$ npm shrinkwrap
|
126
|
wrote npm-shrinkwrap.json
|
127
|
```
|
128
|
Le fichier `npm-shrinkwrap.json` devrait être ajouté à l'historique Git du projet.
|