iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
TypeScript · Intermédiaire

OpenPatch

Créer et publier une librairie Vue 3 — composant de patch notes avec mode Vue, composable, mode standalone CDN, personnalisation CSS et publication npm.

Vue 3TypeScriptViteTailwind CSS v4
GitHub
01Setup Vite + Vue 3 + TypeScript02Types TypeScript et structure de données03Le composant OpenPatch.vue04Versioning avec localStorage05Le composable useOpenPatch06Mode standalone CDN07Build dual-mode et publication npm
Chapitre 7·20 min

Build dual-mode et publication npm

Le build produit deux artefacts depuis un seul codebase : une librairie Vue légère (sans Vue bundlé) et un widget standalone complet (Vue inclus).

Configuration Vite dual-entry

vite.config.ts
export default defineConfig(({ mode }) => {
  const isStandalone = mode === 'standalone'
 
  return {
    plugins: [vue(), tailwindcss()],
    build: {
      lib: {
        entry: resolve(__dirname, isStandalone ? 'src/standalone.ts' : 'src/index.ts'),
        name: 'OpenPatch',
        formats: isStandalone ? ['es', 'umd'] : ['es'],
        fileName: (format) => isStandalone ? `openpatch.${format}.js` : `index.${format}.js`
      },
      rollupOptions: {
        external: isStandalone ? [] : ['vue'],
      },
      outDir: 'dist',
      emptyOutDir: !isStandalone,  // ne pas écraser le premier build
    }
  }
})

Scripts npm

package.json
{
  "scripts": {
    "dev": "vite",
    "build": "npm run build:lib && npm run build:standalone",
    "build:lib": "vite build",
    "build:standalone": "vite build --mode standalone"
  }
}

npm run build enchaîne les deux builds. emptyOutDir: !isStandalone évite que le build standalone efface les fichiers du build lib.

Fichiers produits

dist/
├── index.es.js        ← librairie Vue (sans Vue bundlé) — 8 kB
├── openpatch.es.js    ← standalone ES module (Vue inclus) — 123 kB
├── openpatch.umd.js   ← standalone UMD (Vue inclus) — 77 kB
├── open-patch.css     ← styles compilés — 21 kB
└── index.d.ts         ← types TypeScript

Le renommage de style.css → open-patch.css se fait dans rollupOptions :

output: {
  assetFileNames: (assetInfo) => {
    if (assetInfo.names?.[0] === 'style.css') return 'open-patch.css'
    return assetInfo.names?.[0] || 'asset'
  }
}

Publication npm

Terminal
# S'authentifier
npm login
 
# Publier (utilise les "files" de package.json pour savoir quoi uploader)
npm publish

"files": ["dist"] dans package.json garantit que seul le dossier dist est publié — pas le code source, pas node_modules.

Déploiement GitHub Pages via GitHub Actions

.github/workflows/deploy.yml
name: Deploy
 
on:
  push:
    branches: [main]
 
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm run build
      - uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist

Chaque push sur main déclenche un build et publie dist/ sur GitHub Pages. Les fichiers standalone (openpatch.es.js, open-patch.css) sont ainsi accessibles depuis n'importe quelle page HTML via CDN.

Versionner correctement

Avant chaque publication, incrémenter la version dans package.json :

npm version patch   # 1.0.0 → 1.0.1 (bugfix)
npm version minor   # 1.0.0 → 1.1.0 (nouvelle feature)
npm version major   # 1.0.0 → 2.0.0 (breaking change)

Ces commandes mettent à jour package.json et créent un tag git automatiquement.

Précédent
Mode standalone CDN

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main