-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathesbuild.config.mjs
124 lines (105 loc) · 2.84 KB
/
esbuild.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
112
113
114
115
116
117
118
119
120
121
122
123
import builtins from 'builtin-modules';
import * as dotenv from 'dotenv';
import esbuild from "esbuild";
import { copy } from 'esbuild-plugin-copy';
import fs from 'fs';
import path from 'path';
import process from "process";
dotenv.config()
const banner =
`/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
`;
const demo = (process.argv[2] === 'demo');
const prod = (process.argv[2] === 'production');
const prev = (process.argv[2] === 'preview');
const buildv = prod || prev
import findCacheDir from 'find-cache-dir';
let cacheDir = findCacheDir({
name: 'esbuild-plugin-inline-worker',
create: true,
});
async function buildWorker(workerPath, extraConfig) {
let scriptNameParts = path.basename(workerPath).split('.');
scriptNameParts.pop();
scriptNameParts.push('js');
let scriptName = scriptNameParts.join('.');
let bundlePath = path.resolve(cacheDir, scriptName);
if (extraConfig) {
delete extraConfig.entryPoints;
delete extraConfig.outfile;
delete extraConfig.outdir;
delete extraConfig.workerName;
}
await esbuild.build({
entryPoints: [workerPath],
bundle: true,
minify: true,
outfile: bundlePath,
define: {
process: 'process',
},
target: 'es2020',
format: 'cjs',
...extraConfig,
});
return fs.promises.readFile(bundlePath, {encoding: 'utf-8'});
}
let renamePlugin = {
name: 'rename-styles',
setup(build) {
build.onEnd(() => {
const { outfile } = build.initialOptions;
const outcss = outfile.replace(/\.js$/, '.css');
const fixcss = outfile.replace(/main\.js$/, 'styles.css');
if (fs.existsSync(outcss)) {
console.log('Renaming', outcss, 'to', fixcss);
fs.renameSync(outcss, fixcss);
}
});
},
};
const outputDir = prev ? process.env.prevDir : prod ? process.env.buildDir : demo ? process.env.demoDir : process.env.devDir
esbuild.build({
banner: {
js: banner,
},
entryPoints: ['main.ts'],
bundle: true,
external: [
'obsidian',
'electron',
// '@codemirror/autocomplete',
'@codemirror/collab',
'@codemirror/commands',
// '@codemirror/language',
'@codemirror/lint',
'@codemirror/search',
'@codemirror/state',
'@codemirror/view',
...builtins],
format: 'cjs',
loader: {
'.ttf': 'base64',
},
watch: !buildv,
target: 'es2020',
logLevel: "info",
sourcemap: buildv ? false : 'inline',
treeShaking: true,
minify: true,
outfile: outputDir+'/main.js',
define: { 'process.env.NODE_ENV': prod ? '"production"' : '"development"' },
plugins: [renamePlugin,
// preactCompatPlugin,
...(buildv ? [copy({
resolveFrom: 'cwd',
assets: {
from: 'manifest.json',
to: outputDir+'/manifest.json',
},
})] : []),
],
}).catch(() => process.exit(1));