65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import { vitePlugin as remix } from '@remix-run/dev'
|
|
import { installGlobals } from '@remix-run/node'
|
|
import { defineConfig } from 'vite'
|
|
import babel from 'vite-plugin-babel'
|
|
import tsconfigPaths from 'vite-tsconfig-paths'
|
|
|
|
installGlobals()
|
|
|
|
const prefix = process.env.__INTERNAL_PREFIX || '/admin'
|
|
if (prefix.endsWith('/')) {
|
|
throw new Error('Prefix must not end with a slash')
|
|
}
|
|
|
|
export default defineConfig(({ isSsrBuild }) => {
|
|
// If we have the Headplane entry we build it as a single
|
|
// server.mjs file that is built for production server bundle
|
|
// We know the remix invoked command is vite:build
|
|
if (!process.argv.includes('vite:build') && !process.argv.includes('vite:dev')) {
|
|
return {
|
|
build: {
|
|
minify: false,
|
|
target: 'esnext',
|
|
rollupOptions: {
|
|
input: './server.mjs',
|
|
output: {
|
|
entryFileNames: 'server.js',
|
|
dir: 'build/headplane',
|
|
banner: '#!/usr/bin/env node\n',
|
|
},
|
|
external: (id) => id.startsWith('node:'),
|
|
}
|
|
},
|
|
define: {
|
|
PREFIX: JSON.stringify(prefix),
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
stream: 'node:stream',
|
|
crypto: 'node:crypto',
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ({
|
|
base: `${prefix}/`,
|
|
build: isSsrBuild ? { target: 'ES2022' } : {},
|
|
plugins: [
|
|
remix({
|
|
basename: `${prefix}/`,
|
|
}),
|
|
tsconfigPaths(),
|
|
babel({
|
|
filter: /\.[jt]sx?$/,
|
|
babelConfig: {
|
|
presets: ['@babel/preset-typescript'],
|
|
plugins: [
|
|
['babel-plugin-react-compiler', {}],
|
|
],
|
|
},
|
|
}),
|
|
],
|
|
})
|
|
})
|