diff --git a/package.json b/package.json index dbfa83753..7cb0f7099 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,11 @@ "types": "./dist/index.d.ts", "import": "./dist/click-ui.es.js", "require": "./dist/click-ui.umd.js" + }, + "./bundled": { + "types": "./dist/index.d.ts", + "import": "./dist/click-ui.bundled.es.js", + "require": "./dist/click-ui.bundled.umd.js" } }, "main": "./dist/click-ui.umd.js", @@ -28,7 +33,8 @@ }, "homepage": "https://clickhouse.com", "scripts": { - "build": "tsc && vite build", + "build": "tsc && vite build && yarn build:bundled", + "build:bundled": "vite build -- bundled", "build-storybook": "storybook build", "build:watch": "watch 'npm run build' ./src", "chromatic": "npx chromatic", diff --git a/vite.config.ts b/vite.config.ts index 6a3426d6c..5230450f9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,10 +1,52 @@ /// -import { defineConfig } from "vite"; +import { BuildOptions, defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import path, { resolve } from "path"; import dts from "vite-plugin-dts"; +const buildType = process.argv[4]; +const isBundledBuild = buildType === "bundled"; + +const externalLibraries = [ + "dayjs", + "react", + "react-dom", + "**/*.stories.ts", + "**/*.stories.tsx", + "**/*.test.ts", + "**/*.test.tsx", + "react/jsx-runtime", +]; + +if (!isBundledBuild) { + externalLibraries.push("styled-components"); +} + +const buildOptions: BuildOptions = { + emptyOutDir: false, + minify: false, + lib: { + entry: resolve(__dirname, "src/index.ts"), + name: "click-ui", + formats: ["es", "umd"], + fileName: format => + isBundledBuild ? `click-ui.bundled.${format}.js` : `click-ui.${format}.js`, + }, + rollupOptions: { + // Add _all_ external dependencies here + external: externalLibraries, + output: { + globals: { + dayjs: "dayjs", + react: "React", + "styled-components": "styled", + "react-dom": "ReactDOM", + }, + }, + }, +}; + // https://vitejs.dev/config/ export default defineConfig({ plugins: [ @@ -29,37 +71,7 @@ export default defineConfig({ "@": path.resolve(__dirname, "./src"), }, }, - build: { - minify: false, - lib: { - entry: resolve(__dirname, "src/index.ts"), - name: "click-ui", - formats: ["es", "umd"], - fileName: format => `click-ui.${format}.js`, - }, - rollupOptions: { - // Add _all_ external dependencies here - external: [ - "dayjs", - "react", - "react-dom", - "styled-components", - "**/*.stories.ts", - "**/*.stories.tsx", - "**/*.test.ts", - "**/*.test.tsx", - "react/jsx-runtime", - ], - output: { - globals: { - dayjs: "dayjs", - react: "React", - "styled-components": "styled", - "react-dom": "ReactDOM", - }, - }, - }, - }, + build: buildOptions, test: { environment: "jsdom", include: ["**/*.test.{ts,tsx}"], @@ -67,5 +79,5 @@ export default defineConfig({ watch: false, exclude: ["node_modules"], setupFiles: ["@testing-library/jest-dom", "./setupTests.ts"], - } + }, });