Skip to content

feat!: modernize to Node 24 native ESM, Vitest & semantic-release - #31

Merged
rolljee merged 1 commit into
masterfrom
chore/modernize-node24-esm-semantic-release
Jul 21, 2026
Merged

feat!: modernize to Node 24 native ESM, Vitest & semantic-release#31
rolljee merged 1 commit into
masterfrom
chore/modernize-node24-esm-semantic-release

Conversation

@rolljee

@rolljee rolljee commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Résumé

Modernisation complète de la lib : passage à l'ESM natif sur Node.js 24 (suppression de Babel), remplacement de l'outillage de test/lint/release et refonte de la CI/CD.

Changements

Node 24 / ESM natif

  • "type": "module", engines.node >= 24, main/exportssrc/index.js
  • Extensions .js explicites ajoutées sur tous les imports (requis par le résolveur ESM)
  • Suppression de Babel (@babel/*, babel-jest, regenerator-runtime) et de l'étape de build : src est publié directement
  • Ajout de .nvmrc (24) ; suppression du dossier build/ versionné

Test & Lint

  • Jest → Vitest (ESM natif, tests inchangés, vitest.config.js avec globals: true)
  • ESLint 6 + airbnb → ESLint 9 flat config (eslint.config.js) + eslint-plugin-security
  • Suppression de lodash (jamais utilisé) et nettoyage de directives eslint-disable obsolètes

Release — semantic-release

  • standard-version → semantic-release@25 (.releaserc.json)
  • Config classique : master = release stable, develop = prerelease
  • Plugins : commit-analyzer, release-notes-generator, changelog, npm, github, git
  • version du package.json passée à 0.0.0-development (gérée par le tooling)

CI/CD

  • ubuntu-18.04 → ubuntu-latest, checkout@v4, setup-node@v4 + cache npm, Node 24, npm ci
  • main.yamlPR checks (lint/tests sur les PR)
  • release.yamlsemantic-release sur push master/develop, avec provenance npm

⚠️ Breaking change

Le package est désormais ESM-only et requiert Node.js >= 24. require() (CommonJS) n'est plus supporté → bump majeur (v3.0.0).

À prévoir côté repo

  • Secret NPM_TOKEN présent dans les settings GitHub
  • Protection de branche autorisant semantic-release à pousser le commit de release sur master/develop

Validation locale

  • npm run lint — 0 erreur
  • npm test — 20/20 tests
  • npm audit — 0 vulnérabilité
  • npx semantic-release --dry-run — plugins chargés, config valide

🤖 Generated with Claude Code

Migrate the library to native ES modules on Node 24 and overhaul the
tooling and CI/CD.

- Drop Babel: publish `src` directly as native ESM (`"type": "module"`,
  explicit `.js` import extensions, `engines.node >= 24`, no build step)
- Replace Jest with Vitest (ESM-native, tests kept as-is)
- Replace ESLint 6 + airbnb with ESLint 9 flat config + plugin-security
- Remove unused `lodash` dependency
- Replace standard-version with semantic-release: master (release) and
  develop (prerelease) branches, changelog + npm + github + git plugins
- CI: ubuntu-latest, checkout@v4/setup-node@v4 with npm cache, Node 24;
  PR checks workflow + push-triggered semantic-release with provenance

BREAKING CHANGE: the package is now ESM-only and requires Node.js >= 24.
CommonJS `require()` is no longer supported; consumers must use `import`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rolljee
rolljee merged commit e80d803 into master Jul 21, 2026
2 checks passed
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 3.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@rolljee
rolljee deleted the chore/modernize-node24-esm-semantic-release branch July 25, 2026 07:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant