Skip to content

Instantly share code, notes, and snippets.

@azz0r
Created July 30, 2024 13:39
Show Gist options
  • Save azz0r/ae1df9ff66c1c02a41d0763b268bcc6c to your computer and use it in GitHub Desktop.
Save azz0r/ae1df9ff66c1c02a41d0763b268bcc6c to your computer and use it in GitHub Desktop.
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