generated from IgnacioNMiranda/vite-component-library-template
-
Notifications
You must be signed in to change notification settings - Fork 3
/
vite.config.js
76 lines (72 loc) · 2.12 KB
/
vite.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import path from "node:path"
import { defineConfig } from "vitest/config"
import preact from "@preact/preset-vite"
import peerDepsExternal from "rollup-plugin-peer-deps-external"
import tsconfigPaths from "vite-tsconfig-paths"
import dts from "vite-plugin-dts"
const trimSrcLibDirFromPath = (path) => path.replace(/^(src\/)?lib\//, "")
export default defineConfig(({ mode }) => {
const isLibraryMode = mode === "lib"
/** @type {import('vitest/config').UserConfig} */
return {
plugins: [
peerDepsExternal({ includeDependencies: true }),
tsconfigPaths(),
preact({ prefreshEnabled: false }),
isLibraryMode &&
dts({
tsconfigPath: "./jsconfig.lib.json",
beforeWriteFile: (filePath, content) => ({
filePath: trimSrcLibDirFromPath(filePath),
content,
}),
}),
],
css: {
preprocessorOptions: {
scss: {
additionalData:
'@use "sass:map"; @import "./src/lib/styles/generated/mq.scss"; @import "./src/lib/styles/foundation/viewportHeight.scss";',
},
},
postcss: {
plugins: [],
},
},
esbuild: {
jsx: "automatic",
jsxFactory: "h",
jsxFragment: "Fragment",
},
build: {
minify: false,
lib: {
formats: ["es"],
entry: path.resolve(__dirname, "src/lib/index.js"),
// Move files from /src/lib to /dist
fileName: (format, name) => `${trimSrcLibDirFromPath(name)}.js`,
},
rollupOptions: {
output: {
// Preserve source directory structure in dist
preserveModules: true,
globals: {
preact: "preact",
"preact/jsx-runtime": "preact/jsx-runtime",
"preact/hooks": "preact/hooks",
"preact/compat": "preact/compat",
"preact-transitioning": "preact-transitioning",
"d3-scale": "d3-scale",
"d3-geo": "d3-geo",
"d3-zoom": "d3-zoom",
"d3-selection": "d3-selection",
},
},
},
},
test: {
globals: true,
environment: "jsdom",
},
}
})