Un excellent documentaire (1h) sur la genèse de Node.js et les péripéties qui s'en sont suivies.
Un guide sur l'usage des Worker Threads (multithreading) en Node.js.
Matt Pocock (qui est un peu le gourou absolu de TypeScript) explique simplement comment mettre en place un projet Node.js avec TypeScript.
Pour m'y être mis récemment, je trouve ce genre de ressources précieuses. Il y a tellement d'options et de possibilités qu'on peut facilement se sentir submergé et jeter l'éponge. Ici c'est une très bonne base.
L'équipe qui développe Deno, une alternative à Node.js, vient d'annoncer JSR, un nouveau gestionnaire de paquets (package manager) pour les librairies JavaScript et TypeScript. Une alternative à npm donc.
C'est un grand boom dans le monde du JavaScript. Npm est sans conteste l'un des package managers les plus utilisés au monde. Cette annonce pourrait avoir un impact considérable.
Leur approche n'est pas nécessairement d'essayer de forcer les gens à utiliser Deno, JSR est compatible avec la majorité des runtimes JavaScript, incluant Node et Bun. L'idée est plutôt d'analyser ce qui fonctionne bien et ce qui fonctionne moins bien avec npm, notamment du fait qu'il a ete créé il y a longtemps et dans un contexte bien différent de celui d'aujourd'hui, et de repartir de zéro avec quelque chose de plus efficace et plus ouvert.
Très curieux de voir ce que ça va donner. Ça rappelle la grande époque de Bower 😄
Sous le coude.
Un résumé de ce qu'il s'est passé en 2023 pour Node.
Il semblerait qu'Express.js ne soit pas mort finalement. Ce texte évoque une volonté de réactiver le projet, et publie même une roadmap.
Les bases pour créer une librairie JavaScript aujourd'hui, avec TypeScript, tests, et flux CI/CD pour automatiser les tests et la publication sur npm.
Un excellent article qui détaille pas à pas comment détecter et résoudre un memory leak dans une app Node.js.
Une alternative au module node:fs
qui pallie certaines faiblesses de l'original.
Des conseils sur l'écriture d'un Dockerfile optimisé pour des applications Node.js.
De nombreuses ressources relatives à la sécurité dans les applications Node.js.
Plusieurs façon de configurer vos scripts de développement lorsque vous développez sur un projet Node.js + TypeScript.
ts-node
et ts-node-dev
semblent être les approches les plus simples.
nodemon
gère aussi bien le TypeScript.
Une lib pour faire du test unitaire sur vos applications Node.js. Grâce au fait qu'elle ne gère que Node et pas les navigateurs, elle se dit 9 fois plus légère que Vitest et 5 fois plus légère que Jest.
Un tuto sur comment mettre en place une authentification à base de JWT avec Fastify, Prisma, le tout en TypeScript.
Bon ça fait beaucoup d'outils mais tout est adaptable et l'idée est de comprendre la logique.
Un peu de nuances sur tous les superlatifs employés pour la promotion de Bun, l'alternative vendue comme extrêmement performante à Node.js.
Un regroupement de bonnes pratiques pour Node.js. Tout n'est évidemment pas à suivre aveuglément, mais si vous débutez c'est une bonne base.
Une gigantesque liste de bonne pratiques pour Node.js. Tout n'est pas à prendre aveuglément mais il y a de très bons points. Une saine lecture donc.
Des bonnes pratiques à adopter pour créer des images Docker de vos apps Node.js.
Si vous vous posez la question de comment démarrer un projet en Node.js, cette lib donne accès à des templates standards.
Vous pouvez bien sûr consulter les templates directement sans passer par la lib et piocher uniquement ce qui vous intéresse.
Une lib pour faire du XML to JSON en Node avec un parser apparemment très efficient.
Les différentes façon de debugger une application Node.js.
J'ai découvert récemment qu'il est possible de debugger un fichier TypeScript alors que c'est la version transpilée (le JS donc) qui est en train de s'exécuter. Bien pratique et ça encourage l'usage de TS côté serveur.
Une introduction à Fastify, un framework web pour Node.js, plus optimisé et rapide que le classique Express.
Il vient en outre avec un grand nombre de plugins officiels pour les usages les plus courants (caching, authentification, sécurité, connecteurs base de donnée, etc.).
Un ORM Node.js assez simple qui se base sur knex.js (qui est un query builder).
Avec Napi rs, il est possible de créer des modules Node développés en Rust. Idéal si vous devez effectuer une tâche très lourde comme parser un très gros fichier CSV de plusieurs centaines de Mo.
Dix règles de sécurité à suivre lorsque vous travaillez avec NPM.
Quelques instructions pour améliorer vos Dockerfile pour Node.js.
# Utiliser une version de Node spécifique pour éviter les surprises lors de nouvelles releases.
FROM node:19.4-alpine
# Configurer Node pour la production.
ENV NODE_ENV production
# Sélectionner un répertoire de travail explicitement.
WORKDIR /usr/src/app
# Copier uniquement les fichiers requis pour installer les dépendances pour une meilleure gestion du cache.
COPY package*.json ./
# Installer uniquement les dépendances de production.
RUN npm ci --only=production
# alternative pour bénéficier du cache :
RUN --mount=type=cache,target=/usr/src/app/.npm \
npm set cache /usr/src/app/.npm && \
npm ci --only=production
# Éviter le mode root.
USER node
# Copier le reste du code source (uniquement les fichiers indispensables) après installation des dépendances.
COPY --chown=node:node ./src/ .
# Indiquer explicitement le port exposé par les containers qui utilisent cette image.
EXPOSE 3000
CMD ["node", "index.js"]
Un nouveau gestionnaire de version pour Node.js, en plus de n, nvm, nvs, fnm.
Il est écrit en Rust et d'après la documentation il fait tout pour être le plus invisible possible. À tester.
Un query builder pour Node.js. L'outil se définit comme un ORM mais de ce que j'ai pu lire, ça ressemble beaucoup plus à un query builder. Une alternative à Knex.js en somme.
Cet article est une bonne introduction.
Un guide synthétique sur Pino qui est une libraire de logging pour Node.js. C'est l'une des principales alternatives à Watson qui reste le plus connu.
Créer plusieurs threads pour travailler sur une tâche en parallèle.
Encore un gestionnaire de version de Node.js, après n, nvm, nvs et consorts.
Créer très (très) facilement un cluster load balancé d'instances de votre application Node.js (d'abbord avec le module cluster puis avec pm2 qui simplifie les choses). Parfait pour la prod !
Les articles de Digital Ocean sont toujours aussi chouettes à lire.
Un retour d'expérience positif sur Deno, la principale alternative à Node.js.
La gestion DNS de Node.js peut poser des soucis si vous développez une application qui contact de nombreux domaines différents en peu de temps.
Cet article explique le souci et propose quelques solutions.
Via https://mastodon.xyz/@TheKinrar/109811677595987667
Des bonnes pratiques pour développer avec Node.js. Très instructif :)
Un ORM construit au dessus de knex.js (qui est un query builder), qui a la particularité de ne pas nécessiter de configuration de schémas au préalable. La création des tables et colonnes se fait à la volée en fonction du code.
C'est bien sûr inspiré de RedBeanPHP.
Une alternative à Node.js ou Deno. Ce runtime JavaScript vante ses très bonnes performances. Il présente l'avantage d'être compatible avec une majorité des packages npm.
nvs est un gestionnaire de version pour Node.js. Il permet d'avoir plusieurs versions de Node.js installées sur votre machine et de passer de l'une à l'autre avec une simple commande. Il a l'avantage de fonctionner aussi bien sous Windows que Linux et MacOS. Par contre j'ai noté des soucis sous Windows, et cet article m'a aidé à les résoudre.
En gros, il ne faut pas faire l'installation via Chocolatey comme il est conseillé de le faire dans la doc. Il est préférable de passer par le setup manuel en ligne de commande qui est au final tout aussi simple. Sans quoi, nvs est inutilisable avec Git Bash par exemple.
Le tout est à faire dans un terminal avec les droits administrateur :
set NVS_HOME=%LOCALAPPDATA%\nvs
set NVS_HOME=%ProgramData%\nvs
git clone https://github.com/jasongin/nvs "%NVS_HOME%"
"%NVS_HOME%\nvs.cmd" install
nvs add lts
nvs use <the name of the version installed>
nvs link <the name of the version installed>
Un Dockerfile simple pour créer une image Docker d'application Node.js qui permet de faire des requêtes sur DB Oracle (il faut aller voir l'update 3 en bas de la page pour la version la plus pertinente).
Il manque juste wget. Je copie colle ma version très légèrement modifiée ci-dessous :
FROM node:16-buster-slim
WORKDIR /tmp
RUN apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get install -y alien libaio1 wget
RUN wget https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64.rpm
RUN alien -i --scripts oracle-instantclient*.rpm
RUN rm -f oracle-instantclient19.3*.rpm && apt-get -y autoremove && apt-get -y clean
WORKDIR /myapp
ADD package.json /myapp/
ADD index.js /myapp/
RUN npm install
CMD exec node index.js
Node.js préconise un nouveau gestionnaire de version pour avoir plusieurs version installées en parallèle. Il marche sur Windows, Linux et MacOS contrairement à NVM.
Ghost 4 est de sortie.
Je trouve qu'il s'éloigne un peu de la philosophie "KISS" qui m'avait séduit au début. Ils ont fait des choix et ils les assument. L'outil est maintenant une vraie alternative open source à Medium, avec une gestion très avancée des auteurs et des subscribers. Des aspects qui ne m'intéressent pas à titre personnel. Pareil pour les intégrations avec des outils tiers.
Mais ça reste un très bel outil.
Mettre à jour npm avec nvm pour Windows n'est pas une mince affaire. Voici une façon de faire. Il faut aussi s'assurer que votre path pointe prioritairement sur la version de npm du répertoire d'installation de nodejs (Program Files) et non pas celle de AppData.
Pour vérifier, faites where npm
.
Un query builder pour Node.js. Un peu comme fluentPDO pour PHP.
En général je les préfère aux ORM, c'est un meilleur compromis dans bien des cas.
Un nouveau serveur web minimaliste en Node.js.
Un petit outil pour lister tous les dossiers node_modules sur votre ordi ainsi que l'espace qu'ils occupent. Vous pouvez ensuite supprimer ceux que vous voulez avec la barre d'espace.
Ça paraît idiot mais pour quelqu'un qui fait du dev front, les dossiers node_modules peuvent devenir conséquents à l'échelle du système.
Très bon article sur Artillery que j'utilise beaucoup en local pour faire des petits tests de charge. Très facile à mettre en place !