From 83564c767547b57c836ffa7951bfc8023e9d68e6 Mon Sep 17 00:00:00 2001 From: Roman Axelrod Date: Thu, 30 Apr 2026 21:57:04 -0600 Subject: [PATCH] Add Bridgeable dev watch command --- src/build.js | 4 ++-- src/cli.js | 12 ++++++++++++ src/vite-config.js | 14 +++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/build.js b/src/build.js index 8f09fa8..a1132d5 100644 --- a/src/build.js +++ b/src/build.js @@ -1,6 +1,6 @@ import { build as viteBuild } from 'vite'; import { createViteConfig } from './vite-config.js'; -export const buildSource = async ({ sourceDir, outDir, config }) => { - await viteBuild(createViteConfig({ sourceDir, outDir, config })); +export const buildSource = async ({ sourceDir, outDir, config, watch = false }) => { + return viteBuild(createViteConfig({ sourceDir, outDir, config, watch })); }; diff --git a/src/cli.js b/src/cli.js index 1078e03..9d9361f 100644 --- a/src/cli.js +++ b/src/cli.js @@ -7,6 +7,7 @@ import { packDist } from './pack.js'; const usage = `Usage: bridgeable-build validate --source bridgeable-build build --source --out + bridgeable-build dev --source --out bridgeable-build pack --dist --out bridgeable-build publish --source --out --artifact `; @@ -106,6 +107,17 @@ export const runCli = async (processArgv) => { return; } + if (command === 'dev') { + validateOrThrow(sourceDir, config); + await buildSource({ + sourceDir, + outDir: resolve(args.out ? String(args.out) : 'dist'), + config, + watch: true + }); + return; + } + if (command === 'publish') { const outDir = resolve(requireArg(args, 'out')); validateOrThrow(sourceDir, config); diff --git a/src/vite-config.js b/src/vite-config.js index ed764fd..296fb05 100644 --- a/src/vite-config.js +++ b/src/vite-config.js @@ -5,6 +5,13 @@ import { collectEntries, normalizePath, shouldCopyFile, walkFiles } from './file const copyServerFilesPlugin = ({ sourceDir, outDir }) => ({ name: 'copy-bridgeable-server-files', + buildStart() { + walkFiles(sourceDir, (absolutePath) => { + if (shouldCopyFile(basename(absolutePath))) { + this.addWatchFile(absolutePath); + } + }); + }, closeBundle() { walkFiles(sourceDir, (absolutePath) => { const relativePath = normalizePath(relative(sourceDir, absolutePath)); @@ -21,7 +28,7 @@ const copyServerFilesPlugin = ({ sourceDir, outDir }) => ({ } }); -export const createViteConfig = ({ sourceDir, outDir, config }) => { +export const createViteConfig = ({ sourceDir, outDir, config, watch = false }) => { const sourceRoot = resolve(sourceDir); const outputRoot = resolve(outDir); @@ -34,6 +41,11 @@ export const createViteConfig = ({ sourceDir, outDir, config }) => { outDir: outputRoot, emptyOutDir: true, manifest: 'manifest.json', + watch: watch + ? { + exclude: ['**/.git/**', '**/dist/**', '**/node_modules/**', '**/storybook-static/**'] + } + : null, rollupOptions: { input: collectEntries(sourceRoot, config), output: {