generated from League-of-Foundry-Developers/FoundryVTT-Module-Template
-
Notifications
You must be signed in to change notification settings - Fork 55
/
vite.config.mjs
111 lines (95 loc) · 4.1 KB
/
vite.config.mjs
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* eslint-env node */
import { svelte } from '@sveltejs/vite-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve'; // This resolves NPM modules from node_modules.
import preprocess from 'svelte-preprocess';
import {
postcssConfig,
terserConfig } from '@typhonjs-fvtt/runtime/rollup';
// ATTENTION!
// Please modify the below variables: s_PACKAGE_ID and s_SVELTE_HASH_ID appropriately.
// For convenience, you just need to modify the package ID below as it is used to fill in default proxy settings for
// the dev server.
const s_PACKAGE_ID = 'modules/item-piles';
// A short additional string to add to Svelte CSS hash values to make yours unique. This reduces the amount of
// duplicated framework CSS overlap between many TRL packages enabled on Foundry VTT at the same time. 'tse' is chosen
// by shortening 'template-svelte-esm'.
const s_SVELTE_HASH_ID = 'tse';
const s_COMPRESS = false; // Set to true to compress the module bundle.
const s_SOURCEMAPS = true; // Generate sourcemaps for the bundle (recommended).
// Used in bundling particularly during development. If you npm-link packages to your project add them here.
const s_RESOLVE_CONFIG = {
browser: true,
dedupe: ['svelte']
};
export default () =>
{
/** @type {import('vite').UserConfig} */
return {
root: 'src/', // Source location / esbuild root.
base: `/${s_PACKAGE_ID}/`, // Base module path that 30001 / served dev directory.
publicDir: false, // No public resources to copy.
cacheDir: '../.vite-cache', // Relative from root directory.
resolve: { conditions: ['import', 'browser'] },
esbuild: {
target: ['es2022']
},
css: {
// Creates a standard configuration for PostCSS with autoprefixer & postcss-preset-env.
postcss: postcssConfig({ compress: s_COMPRESS, sourceMap: s_SOURCEMAPS })
},
// About server options:
// - Set to `open` to boolean `false` to not open a browser window automatically. This is useful if you set up a
// debugger instance in your IDE and launch it with the URL: 'http://localhost:30001/game'.
//
// - The top proxy entry redirects requests under the module path for `style.css` and following standard static
// directories: `assets`, `lang`, and `packs` and will pull those resources from the main Foundry / 30000 server.
// This is necessary to reference the dev resources as the root is `/src` and there is no public / static
// resources served with this particular Vite configuration. Modify the proxy rule as necessary for your
// static resources / project.
server: {
port: 29999,
open: '/game',
proxy: {
// Serves static files from main Foundry server.
[`^(/${s_PACKAGE_ID}/(assets|lang|packs|style.css))`]: 'http://localhost:30000',
// All other paths besides package ID path are served from main Foundry server.
[`^(?!/${s_PACKAGE_ID}/)`]: 'http://localhost:30000',
// Enable socket.io from main Foundry server.
'/socket.io': { target: 'ws://localhost:30000', ws: true }
}
},
build: {
outDir: __dirname,
emptyOutDir: false,
sourcemap: s_SOURCEMAPS,
brotliSize: true,
minify: s_COMPRESS ? 'terser' : false,
target: ['es2022'],
terserOptions: s_COMPRESS ? { ...terserConfig(), ecma: 2022 } : void 0,
lib: {
entry: './module.js',
formats: ['es'],
fileName: 'module'
}
},
// Necessary when using the dev server for top-level await usage inside TRL.
optimizeDeps: {
esbuildOptions: {
target: 'es2022'
}
},
plugins: [
svelte({
compilerOptions: {
// Provides a custom hash adding the string defined in `s_SVELTE_HASH_ID` to scoped Svelte styles;
// This is reasonable to do as the framework styles in TRL compiled across `n` different packages will
// be the same. Slightly modifying the hash ensures that your package has uniquely scoped styles for all
// TRL components and makes it easier to review styles in the browser debugger.
cssHash: ({ hash, css }) => `svelte-${s_SVELTE_HASH_ID}-${hash(css)}`
},
preprocess: preprocess()
}),
resolve(s_RESOLVE_CONFIG) // Necessary when bundling npm-linked packages.
]
};
};