{"id":13517110,"url":"https://github.com/thom4parisot/nodebook","last_synced_at":"2025-04-05T19:13:57.455Z","repository":{"id":12306451,"uuid":"14938520","full_name":"thom4parisot/nodebook","owner":"thom4parisot","description":"📖 Livre publié aux Éditions Eyrolles • Première édition : Node.js v10 et npm v6.","archived":false,"fork":false,"pushed_at":"2022-11-20T00:13:13.000Z","size":31758,"stargazers_count":304,"open_issues_count":123,"forks_count":73,"subscribers_count":16,"default_branch":"v1","last_synced_at":"2024-05-23T03:23:55.903Z","etag":null,"topics":["apprendre","asciidoctor","book","code","commun","exemples","exercices","francais","frontend","javascript","learn-to-code","learning-by-doing","learning-exercise","learning-js","livre","nodejs"],"latest_commit_sha":null,"homepage":"https://apprendre-nodejs.fr/v1/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thom4parisot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.CC","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"oncletom","open_collective":"nodebook"}},"created_at":"2013-12-04T23:07:37.000Z","updated_at":"2024-04-13T20:30:51.000Z","dependencies_parsed_at":"2022-07-12T15:04:46.644Z","dependency_job_id":null,"html_url":"https://github.com/thom4parisot/nodebook","commit_stats":null,"previous_names":["oncletom/nodebook"],"tags_count":53,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thom4parisot%2Fnodebook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thom4parisot%2Fnodebook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thom4parisot%2Fnodebook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thom4parisot%2Fnodebook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thom4parisot","download_url":"https://codeload.github.com/thom4parisot/nodebook/tar.gz/refs/heads/v1","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246876104,"owners_count":20848106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apprendre","asciidoctor","book","code","commun","exemples","exercices","francais","frontend","javascript","learn-to-code","learning-by-doing","learning-exercise","learning-js","livre","nodejs"],"created_at":"2024-08-01T05:01:29.901Z","updated_at":"2025-04-05T19:13:57.415Z","avatar_url":"https://github.com/thom4parisot.png","language":"JavaScript","readme":"# Node.js • Apprendre par la pratique [![Build Linux][ci-linux]](https://travis-ci.org/oncletom/nodebook) [![Build Windows][ci-windows]](https://ci.appveyor.com/project/oncletom/nodebook) [![Backers on Open Collective](https://opencollective.com/nodebook/backers/badge.svg)][backers] \u003c!--[![Sponsors on Open Collective](https://opencollective.com/nodebook/sponsors/badge.svg)][sponsors]--\u003e\n\n\u003e Familiarisez-vous avec JavaScript, Node.js et l'écosystème de modules `npm`.\nApprenez à concevoir et à déployer des *applications web* et\ndes *outils en ligne de commande*.\n\u003e\n\u003e Plus de 500 exemples pour apprendre en pratiquant.\n\n✅ **Versions couvertes** • `node v10` • `npm v6`.\u003cbr\u003e\n📖 **Journal de bord d'écriture** • [2018][journal-2018] • [2017][journal-2017].\u003cbr\u003e\n🔎 **Lire l'ouvrage** • [sur papier](#sur-papier) • [sur liseuse numérique](#sur-liseuse-numérique) • [sur le web](#sur-le-web) • [sur npm](#avec-nodejs).\n\n\n[![Couverture du livre « Node.js »](cover.png)](#lire-louvrage)\n\n\n# Table des matières\n\n| Chapitre                  | Objectif d'apprentissage | |\n|---------------------------|--------- |---|\n| **[Avant-propos][preamble]** | _pourquoi tu écris cet ouvrage ?_ | -\n| **[Histoire, écosystème et gouvernance][ch01]** | _ça marche comment la vie de Node et des gens qui le font ?_ | [issues][ch01-issues]\n| **[Installer, mettre à jour et développer][ch02]** | _ça marche comment Node sur une machine ?_ | [issues][ch02-issues]\n| **[Jouer avec JavaScript][ch03]** | _ça marche comment JavaScript ?_ | [issues][ch03-issues]\n| **[Jouer avec Node.js][ch04]** | _ça marche comment les modules ?_ | [issues][ch04-issues]\n| **[Jouer avec npm][ch05]** | _ça marche comment l'outil npm ?_ | [issues][ch05-issues]\n| **[Déployer notre code][ch06]** | _ça marche comment côté hosting ?_ | [issues][ch06-issues]\n| **[Créer une application web][ch07]** |  _ça marche comment HTTP ?_ | [issues][ch07-issues]\n| **[Créer un outil en ligne de commande][ch08]** | _ça marche comment du code métier dans le terminal ?_ | [issues][ch08-issues]\n| **[Créer une application frontend][ch09]** | _ça marche comment les modules Node dans les navigateurs web ?_ | [issues][ch09-issues]\n| Annexe : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues]\n\n# Lire l'ouvrage\n\n## Sur le web\n\n🌐 L’épreuve est consultable gratuitement à cette adresse : [apprendre-nodejs.fr/v1/][livre-web].\n\nDe nombreux exemples sont interactifs, modifiables et affichent leur résultat depuis un simple navigateur web.\n\n**Fonctionnalités** : exemples interactifs, vidéos, mise à jour en continu.\n\n## Sur liseuse numérique\n\n📱 L'e-book est édité et vendu par les [**Éditions Eyrolles**](https://www.editions-eyrolles.com/Livre/9782212139938).\n\n**Fonctionnalités** : compact, chercher dans le contenu, rémunère mon travail.\n\n## Sur papier\n\n📖 Le livre est édité, publié et distribué par les **Éditions Eyrolles**.\n\nIl s'obtient de plusieurs manières :\n\n* [Commander et se faire livrer par **Eyrolles**](https://www.eyrolles.com/Informatique/Livre/node-js-9782212139938)\n* [Acheter en **librairie indépendante**, près de chez soi](https://www.placedeslibraires.fr/livre/9782212139938)\n* [Se faire livrer par **Amazon.fr**](https://amzn.to/2F0l737)\n\n**Fonctionnalités** : confort de lecture, annotations libres, rémunère mon travail.\n\n\n## Avec Node.js\n\n📦 Le livre est disponible en tant que **module npm** : [`nodebook`][livre-npm].\n\n**Fonctionnalités** : apprendre Node.js avec Node.js, tous les exemples sont fonctionnels, lecture hors-ligne.\n\n```bash\n$ npm install --global nodebook\n$ nodebook install all\n```\n\nCette commande télécharge une copie du livre et les dépendances des exemples pour une utilisation hors-ligne.\n\nLe manuel d'utilisation s'invoque avec l'argument `--help` :\n\n```bash\n$ nodebook --help\n\nCommandes:\n  nodebook chapters               Liste les chapitres de l'ouvrage.\n  nodebook dir \u003cchapter\u003e          Affiche le chemin vers un chapitre.\n  nodebook install \u003cchapter|all\u003e  Installe les dépendances d'un chapitre.\n  nodebook read                   Démarre la lecture du livre au format HTML\n\nOptions:\n  --version  Affiche le numéro de version                              [booléen]\n  --help     Affiche de l'aide                                         [booléen]\n\nExemples:\n  nodebook install chapter-04               Installe les dépendances du chapitre\n                                            4\n  nodebook install all                      Installe les dépendances de tous les\n                                            chapitres\n  cd $(nodebook dir chapter-04)             Place le terminal dans le répertoire\n                                            d'exemples du chapitre 4\n  cd $(nodebook dir chapter-04 --root)      Place le terminal dans le répertoire\n                                            racine du chapitre 4\n```\n\n# Contribuer au contenu\n\nJe vous invite à contribuer **de la manière de votre choix** — par e-mail, en ouvrant une _issue_ ou en contribuant du texte ou du code.\n\nSi vous n'êtes pas sûr·e de votre coup mais que l'envie est là, c'est suffisant pour démarrer 🙂. Nous éclaircirons les choses ensemble.\n\n## Installation de la copie de travail\n\nIl est possible de travailler sur une copie locale de l'épreuve en la dupliquant avec Git.\n\n```bash\n$ git clone --single-branch https://github.com/thom4parisot/nodebook\n$ cd nodebook\n# Installe les dépendances de développement\n$ npm ci\n# Installe les dépendances des chapitres\n$ npm run install:all\n```\n\nCette commande facultative récupère les vidéos localement :\n\n```bash\n$ git lfs pull\n```\n\nElle utilise l'extension [git-lfs](https://git-lfs.github.com/).\n\n## Prévisualisation des changements\n\nUn serveur local est disponible pour prévisualiser les modifications sans être connecté à Internet.\n\n```bash\n$ npm start\n```\n\nL'épreuve est accessible sur [http://localhost:3000](http://localhost:3000).\n\n## Tests\n\nLa bonne santé des exemples est vérifiée à l'aide d'[ESLint](http://eslint.org/) et de [tape-spawn](https://npmjs.com/tape-spawn).\n\n```bash\n$ npm test\n```\n\n## État des dépendances\n\n|             | Dépendances       | Sécurité\n| ------------|-------------------|---------\n| Chapitre 1  | ![][ch01-deps]    | ![][ch01-security]\n| Chapitre 2  | ![][ch02-deps]    | ![][ch02-security]\n| Chapitre 3  | ![][ch03-deps]    | ![][ch03-security]\n| Chapitre 4  | ![][ch04-deps]    | ![][ch04-security]\n| Chapitre 5  | ![][ch05-deps]    | ![][ch05-security]\n| Chapitre 6  | ![][ch06-deps]    | ![][ch06-security]\n| Chapitre 7  | ![][ch07-deps]    | ![][ch07-security]\n| Chapitre 8  | ![][ch08-deps]    | ![][ch08-security]\n| Chapitre 9  | ![][ch09-deps]    | ![][ch09-security]\n| Annexe A    | ![][a01-deps]    | ![][a01-security]\n\n## Génération des épreuves\n\n### HTML\n\n```bash\n$ make build-html\n$ open ./dist\n```\n\n### OpenDocument\n\n```bash\n$ make build-odt\n$ soffice ./dist/book.fodt\n```\n\n\n## Contributrices et Contributeurs\n\n🙌 Merci à vous pour avoir contribué à l'ouvrage grâce à vos relectures, corrections et demandes de clarification.\n\n[![](https://opencollective.com/nodebook/contributors.svg?width=890\u0026button=false)][contributors]\n\n🙏 Merci à vous pour avoir [contribué financièrement](https://opencollective.com/nodebook#backer) à l'écriture de l'ouvrage !\n\n\u003ca href=\"https://opencollective.com/nodebook#backers\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/backers.svg?width=890\u0026button=false\"\u003e\u003c/a\u003e\n\n\u003c!--\n## Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/nodebook#sponsor)]\n\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/nodebook/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/nodebook/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n--\u003e\n\n# Mentions légales\n\n_Node.js • Apprendre par la pratique_ est un ouvrage rédigé par [Thomas Parisot](https://thom4.net). Il est édité, publié et distribué en papier et e-book par les [Éditions Eyrolles][Eyrolles].\n\nL’épreuve est soumise à la licence [Creative Commons NC-BY-SA 4.0][cc-nc-by-sa] (_Attribution, Non-Commercial, Share Alike_).\u003cbr\u003e\nLes exemples de code sont placés sous la [licence MIT][].\n\n[ci-linux]: https://travis-ci.org/oncletom/nodebook.svg?branch=master\n[ci-windows]: https://ci.appveyor.com/api/projects/status/crewvvqeybl8f16c?svg=true\u0026amp;branch=master\n[journal-2018]: docs/JOURNAL.md\n[journal-2017]: docs/JOURNAL-2017.md\n[livre-web]: https://apprendre-nodejs.fr/v1/\n[livre-npm]: https://npmjs.com/nodebook\n[Eyrolles]: http://www.eyrolles.fr\n[playlist]: https://open.spotify.com/user/oncletom/playlist/4Ywqaz0XpFVNa5CKohuUN8?si=edpuGs_NRgapHyigrrwU3w\n[licence MIT]: LICENSE\n[cc-nc-by-sa]: https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr\n[backers]: https://opencollective.com/nodebook#backers\n[sponsors]: https://opencollective.com/nodebook#sponsor\n[contributors]: https://github.com/thom4parisot/nodebook/graphs/contributors\n[preamble]: foreword/preamble.adoc\n[ch01]: chapter-01/index.adoc\n[ch01-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:1\n[ch01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-01\n[ch01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-01/package.json\n[ch02]: chapter-02/index.adoc\n[ch02-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:2\n[ch02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-02\n[ch02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-02/package.json\n[ch03]: chapter-03/index.adoc\n[ch03-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:3\n[ch03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-03\n[ch03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-03/package.json\n[ch04]: chapter-04/index.adoc\n[ch04-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:4\n[ch04-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-04\n[ch04-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-04/package.json\n[ch05]: chapter-05/index.adoc\n[ch05-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:5\n[ch05-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-05\n[ch05-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-05/package.json\n[ch06]: chapter-06/index.adoc\n[ch06-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:6\n[ch06-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-06\n[ch06-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-06/package.json\n[ch07]: chapter-07/index.adoc\n[ch07-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:7\n[ch07-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-07\n[ch07-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-07/package.json\n[ch08]: chapter-08/index.adoc\n[ch08-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:8\n[ch08-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-08\n[ch08-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-08/package.json\n[ch09]: chapter-09/index.adoc\n[ch09-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:9\n[ch09-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=chapter-09\n[ch09-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=chapter-09/package.json\n[a01]: appendix-a/index.adoc\n[appendix-issues]: https://github.com/thom4parisot/nodebook/labels/:book:%20chapitre:annexes\n[a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a\n[a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json\n","funding_links":["https://github.com/sponsors/oncletom","https://opencollective.com/nodebook"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthom4parisot%2Fnodebook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthom4parisot%2Fnodebook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthom4parisot%2Fnodebook/lists"}