-
Notifications
You must be signed in to change notification settings - Fork 64
/
vite.config.ts
88 lines (85 loc) · 2.95 KB
/
vite.config.ts
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
77
78
79
80
81
82
83
84
85
86
87
88
/**
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { viteCommonjs } from '@originjs/vite-plugin-commonjs';
import react from '@vitejs/plugin-react';
import { UserConfig, defineConfig } from 'vite';
import checker from 'vite-plugin-checker';
import { VitePluginNode } from 'vite-plugin-node';
import svgrPlugin from 'vite-plugin-svgr';
// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
const config: UserConfig = {
build: {
// Included in the bundled build so that users can see non-minified error
// messages using DevTools for debugging (at the cost of bundle size).
sourcemap: true,
outDir: mode === 'server' ? 'dist/server' : 'dist/client',
},
publicDir: mode === 'server' ? false : 'public',
plugins: [
react(),
svgrPlugin({
svgrOptions: {
icon: true,
},
}),
viteCommonjs(),
checker({
typescript: true,
eslint: { lintCommand: 'eslint --ext .js,.jsx,.ts,.tsx src/' },
}),
],
resolve: {
alias:
mode !== 'server'
? {
// node-fetch is imported by Firebase SDKs but not actually used
// in browsers. Stub it to silence Vite errors on Node.js deps.
'node-fetch': './src/stub.js',
}
: undefined,
},
};
if (command === 'serve' || mode === 'server') {
// Start Node.js server (APIs) during dev time.
config.plugins!.push(
...VitePluginNode({
// tell the plugin where is your project entry
appPath: './server.ts',
// the name of named export of you app from the appPath file
exportName: 'viteNodeApp',
tsCompiler: 'esbuild',
// https://github.com/axe-me/vite-plugin-node/issues/47
adapter({ app, req, res, next }) {
if (req.url?.startsWith('/api/')) {
app(req, res);
} else {
next();
}
},
})
);
// Rollup a server bundle when `vite build --mode server` is invoked.
if (command === 'build') {
// @ts-ignore (Vite alpha feature: https://vitejs.dev/config/#ssr-options)
// This instructs Vite to rollup all dependencies into a single file.
// Needed because the Emulator UI is distributed as a self-contained zip
// ball with no `node_modules` or `package.json`.
config.ssr = { noExternal: /^(?!dns)/ };
}
}
return config;
});