🔧(react) adapt script and config to use the watch mode of vite

If we work from an app perspective, it is nice to have a watch mode
on our packages to see the changes in real time. Better to use the
watch mode of vite (rollup) compare to nodemon because it is faster,
we re-transpile only the files that have changed.
Possility to use the wath mode by polling as well, on a remote machine
the HMR does not work well, the polling mode helps to solve this issue.
This commit is contained in:
Anthony Le Courric
2023-08-11 15:15:12 +02:00
committed by Jean-Baptiste PENRATH
parent 4f4f1682a6
commit c880222c12
2 changed files with 80 additions and 51 deletions

View File

@@ -26,8 +26,10 @@
],
"scripts": {
"lint": "eslint . 'src/**/*.{ts,tsx}'",
"dev": "yarn storybook & nodemon --watch src --ext '*' --ignore src/cunningham-tokens.ts --ignore src/cunningham-tokens.js --ignore src/cunningham-tokens.css --exec npm run build",
"dev": "yarn storybook",
"build": "bash ./build",
"build:watch": "yarn build && vite build --mode watch",
"build:watch-polling": "yarn build && vite build --mode watch-polling",
"build-fonts": "vite build -c vite.fonts.config.ts && rm -rf dist/fonts.js && make-dir dist/sass && cp src/fonts.scss dist/sass/",
"build-icons": "vite build -c vite.icons.config.ts && rm -rf dist/icons.js && make-dir dist/sass && cp src/icons.scss dist/sass/",
"build-theme": "cunningham -o src -g css,ts,js",

View File

@@ -3,61 +3,88 @@ import { defineConfig } from "vitest/config";
import react from "@vitejs/plugin-react";
import dts from "vite-plugin-dts";
import tsconfigPaths from "vite-tsconfig-paths";
import { BuildOptions } from "vite";
// https://vitejs.dev/config/
export default defineConfig({
build: {
emptyOutDir: true,
outDir: "dist",
sourcemap: true,
lib: {
entry: {
index: "./src/index.ts",
export default defineConfig(({ mode }) => {
let buildOptions: { watch: BuildOptions["watch"] };
let emptyOutDir = true;
if (mode.includes("watch")) {
emptyOutDir = false;
buildOptions = {
watch: {
include: ["src/**/*"],
},
formats: ["es", "cjs"],
},
rollupOptions: {
external: ["react", "react-dom"],
output: {
globals: {
react: "React",
"react-dom": "ReactDOM",
};
if (mode.includes("polling")) {
buildOptions = {
watch: {
...buildOptions.watch,
chokidar: {
usePolling: true,
interval: 1000,
},
},
};
}
}
return {
build: {
emptyOutDir,
outDir: "dist",
sourcemap: true,
lib: {
entry: {
index: "./src/index.ts",
},
formats: ["es", "cjs"],
},
rollupOptions: {
external: ["react", "react-dom"],
output: {
globals: {
react: "React",
"react-dom": "ReactDOM",
},
},
},
...buildOptions,
},
},
plugins: [
tsconfigPaths(),
dts({
rollupTypes: true,
beforeWriteFile: (filePath, content) => {
return {
filePath,
content: content.replace("../../locales", "./locales"),
};
},
}),
react(),
],
test: {
environment: "jsdom",
reporters: "verbose",
globals: true,
watchExclude: ["**/cunningham-tokens.js"],
coverage: {
all: true,
include: ["src/**/*.{ts,tsx}"],
exclude: ["**/*.stories.tsx", "**/*.spec.tsx"],
},
globalSetup: ["src/tests/Global.ts"],
setupFiles: ["src/tests/Setup.ts"],
},
resolve: {
alias: [
{
find: ":",
replacement: resolve(__dirname, "./src"),
},
plugins: [
tsconfigPaths(),
dts({
rollupTypes: true,
beforeWriteFile: (filePath, content) => {
return {
filePath,
content: content.replace("../../locales", "./locales"),
};
},
}),
react(),
],
},
test: {
environment: "jsdom",
reporters: "verbose",
globals: true,
watchExclude: ["**/cunningham-tokens.js"],
coverage: {
all: true,
include: ["src/**/*.{ts,tsx}"],
exclude: ["**/*.stories.tsx", "**/*.spec.tsx"],
},
globalSetup: ["src/tests/Global.ts"],
setupFiles: ["src/tests/Setup.ts"],
},
resolve: {
alias: [
{
find: ":",
replacement: resolve(__dirname, "./src"),
},
],
},
};
});