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: {