Created
July 30, 2024 13:39
-
-
Save azz0r/ae1df9ff66c1c02a41d0763b268bcc6c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import packageJson from "./package.json"; | |
import * as path from 'path'; | |
import checker from 'vite-plugin-checker'; | |
import topLevelAwait from "vite-plugin-top-level-await"; | |
import { defineConfig, transformWithEsbuild } from 'vite' | |
import react from '@vitejs/plugin-react' | |
const getPackageName = () => { | |
return packageJson.name; | |
}; | |
const getPackageNameCamelCase = () => { | |
try { | |
return getPackageName().replace(/-./g, char => char[1].toUpperCase()); | |
} catch (err) { | |
throw new Error("Name property in package.json is missing."); | |
} | |
}; | |
const fileName = { | |
es: `${getPackageName()}.mjs`, | |
// cjs: `${getPackageName()}.cjs`, | |
// mjs: `${getPackageName()}.mjs`, | |
// iife: `${getPackageName()}.iife.js`, | |
}; | |
const formats = Object.keys(fileName); | |
const plugins = [ | |
checker({ typescript: false }), | |
{ | |
name: 'treat-js-files-as-jsx', | |
async transform(code, id) { | |
if (!id.match(/src\/.*\.js$/)) return null | |
// Use the exposed transform from vite, instead of directly | |
// transforming with esbuild | |
return transformWithEsbuild(code, id, { | |
loader: 'jsx', | |
jsx: 'automatic', | |
}) | |
}, | |
}, | |
react(), | |
// wasm(), | |
topLevelAwait() | |
] | |
const optimizeDeps = { | |
force: true, | |
// exclude: ['@sqlite.org/sqlite-wasm'], | |
esbuildOptions: { | |
loader: { | |
'.js': 'jsx', | |
}, | |
}, | |
} | |
const resolve = { | |
alias: [ | |
{ find: "@", replacement: path.resolve(__dirname, "src") }, | |
{ find: "@@", replacement: path.resolve(__dirname) }, | |
], | |
} | |
const test = {} | |
const baseConfig = { | |
server: { | |
port: 5174, | |
// headers: { | |
// 'Cross-Origin-Opener-Policy': 'same-origin', | |
// 'Cross-Origin-Embedder-Policy': 'require-corp', | |
// }, | |
}, | |
base: "./", | |
build: { | |
outDir: "./dist", | |
rollupOptions: { | |
input: path.resolve(__dirname, "index.html"), | |
// entryFileNames: '[name].js', | |
// chunkFileNames: '[name].js' | |
}, | |
lib: { | |
entry: path.resolve(__dirname, "src/index.js"), | |
name: getPackageNameCamelCase(), | |
formats, | |
fileName: format => fileName[format], | |
}, | |
}, | |
test, | |
resolve, | |
plugins, | |
optimizeDeps, | |
} | |
export default defineConfig(({ command, mode, isSsrBuild, isPreview }) => { | |
const define = { | |
'process.env.NODE_ENV': JSON.stringify(mode), | |
}; | |
if (command === 'serve') { | |
return { ...baseConfig, define }; | |
} else { // build | |
return Object.assign({}, baseConfig, { | |
define, | |
build: { | |
...baseConfig.build, | |
minify: false, | |
} | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment