diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-12-30 12:05:27 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-12-30 12:05:27 +0100 |
commit | 62d816402c6ddccf22c9ac68822cf100f61662d6 (patch) | |
tree | 3963ce347ea0278e22f63eb16615ef3a23c23bf9 /scripts | |
parent | build: Simplify clean script (diff) | |
download | sophie-62d816402c6ddccf22c9ac68822cf100f61662d6.tar.gz sophie-62d816402c6ddccf22c9ac68822cf100f61662d6.tar.zst sophie-62d816402c6ddccf22c9ac68822cf100f61662d6.zip |
build: Use shared packages through modules
By running the build for the shared packages only once, errors in them
are reported only once in watch mode.
We still have to point jest to the original source files (and rebuild
the shared source files as part of the test), because it won't load the
"module" entry of the shared packages. However, as a benefit, jest can
now run even if the shared packages haven't been built yet.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/build.js | 21 | ||||
-rw-r--r-- | scripts/watch.js | 43 |
2 files changed, 35 insertions, 29 deletions
diff --git a/scripts/build.js b/scripts/build.js index 416530d..5abcdab 100644 --- a/scripts/build.js +++ b/scripts/build.js | |||
@@ -18,16 +18,21 @@ function buildPackageVite(packageName) { | |||
18 | } | 18 | } |
19 | 19 | ||
20 | function buildAll() { | 20 | function buildAll() { |
21 | // Esbuild can natively load a typescript main file, | 21 | const buildServiceShared = buildPackageEsbuild('service-shared'); |
22 | // so we don't need to bundle `service-shared`. | ||
23 | // We onyl bundle `shared` for vite. | ||
24 | const buildShared = buildPackageEsbuild('shared'); | 22 | const buildShared = buildPackageEsbuild('shared'); |
25 | return Promise.all([ | 23 | return Promise.all([ |
26 | buildShared.then(() => buildPackageEsbuild('main')), | 24 | Promise.all([ |
27 | buildPackageEsbuild('service-inject'), | 25 | buildServiceShared, |
28 | buildPackageEsbuild('service-preload'), | 26 | buildShared, |
29 | buildPackageEsbuild('preload'), | 27 | ]).then(() => buildPackageEsbuild('main')), |
30 | buildPackageVite('renderer'), | 28 | buildServiceShared.then(() => Promise.all([ |
29 | buildPackageEsbuild('service-inject'), | ||
30 | buildPackageEsbuild('service-preload'), | ||
31 | ])), | ||
32 | buildShared.then(() => Promise.all([ | ||
33 | buildPackageEsbuild('preload'), | ||
34 | buildPackageVite('renderer'), | ||
35 | ])), | ||
31 | ]); | 36 | ]); |
32 | } | 37 | } |
33 | 38 | ||
diff --git a/scripts/watch.js b/scripts/watch.js index 367ab88..d4229e9 100644 --- a/scripts/watch.js +++ b/scripts/watch.js | |||
@@ -11,10 +11,10 @@ process.env.MODE = 'development'; | |||
11 | process.env.NODE_ENV = 'development'; | 11 | process.env.NODE_ENV = 'development'; |
12 | 12 | ||
13 | /** @type {string} */ | 13 | /** @type {string} */ |
14 | const sharedPackageSource = packageSource('shared'); | 14 | const sharedModule = join(__dirname, '../packages/shared/dist/index.mjs'); |
15 | 15 | ||
16 | /** @type {string} */ | 16 | /** @type {string} */ |
17 | const serviceSharedPackageSource = packageSource('service-shared'); | 17 | const serviceSharedModule = join(__dirname, '../packages/service-shared/dist/index.mjs'); |
18 | 18 | ||
19 | /** @type {RegExp[]} */ | 19 | /** @type {RegExp[]} */ |
20 | const stderrIgnorePatterns = [ | 20 | const stderrIgnorePatterns = [ |
@@ -29,14 +29,6 @@ const stderrIgnorePatterns = [ | |||
29 | 29 | ||
30 | /** | 30 | /** |
31 | * @param {string} packageName | 31 | * @param {string} packageName |
32 | * @returns {string} | ||
33 | */ | ||
34 | function packageSource(packageName) { | ||
35 | return join(__dirname, `../packages/${packageName}/src`); | ||
36 | } | ||
37 | |||
38 | /** | ||
39 | * @param {string} packageName | ||
40 | * @param {string[]} [extraPaths] | 32 | * @param {string[]} [extraPaths] |
41 | * @param {() => void} [callback] | 33 | * @param {() => void} [callback] |
42 | * @return {Promise<void>} | 34 | * @return {Promise<void>} |
@@ -47,7 +39,7 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
47 | config.incremental = true; | 39 | config.incremental = true; |
48 | const incrementalBuild = await esbuild.build(config); | 40 | const incrementalBuild = await esbuild.build(config); |
49 | const paths = [ | 41 | const paths = [ |
50 | packageSource(packageName), | 42 | join(__dirname, `../packages/${packageName}/src`), |
51 | ...(extraPaths || []), | 43 | ...(extraPaths || []), |
52 | ]; | 44 | ]; |
53 | const watcher = chokidar.watch(paths, { | 45 | const watcher = chokidar.watch(paths, { |
@@ -60,8 +52,8 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
60 | } | 52 | } |
61 | watcher.on('change', () => { | 53 | watcher.on('change', () => { |
62 | incrementalBuild.rebuild().then(() => { | 54 | incrementalBuild.rebuild().then(() => { |
63 | console.log(`\u26a1 Reloading package ${packageName}`); | ||
64 | if (callback) { | 55 | if (callback) { |
56 | console.log(`\u26a1 Reloading package ${packageName}`); | ||
65 | callback(); | 57 | callback(); |
66 | } | 58 | } |
67 | }).catch((err) => { | 59 | }).catch((err) => { |
@@ -100,7 +92,7 @@ async function setupDevServer(packageName) { | |||
100 | * @return {Promise<void>} | 92 | * @return {Promise<void>} |
101 | */ | 93 | */ |
102 | function setupPreloadPackageWatcher(sendEvent) { | 94 | function setupPreloadPackageWatcher(sendEvent) { |
103 | return setupEsbuildWatcher('preload', [sharedPackageSource], () => { | 95 | return setupEsbuildWatcher('preload', [sharedModule], () => { |
104 | sendEvent({ | 96 | sendEvent({ |
105 | type: 'full-reload', | 97 | type: 'full-reload', |
106 | }); | 98 | }); |
@@ -113,7 +105,7 @@ function setupPreloadPackageWatcher(sendEvent) { | |||
113 | * @return {Promise<void>} | 105 | * @return {Promise<void>} |
114 | */ | 106 | */ |
115 | function setupServicePackageWatcher(packageName, sendEvent) { | 107 | function setupServicePackageWatcher(packageName, sendEvent) { |
116 | return setupEsbuildWatcher(packageName, [serviceSharedPackageSource], () => { | 108 | return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { |
117 | sendEvent({ | 109 | sendEvent({ |
118 | type: 'custom', | 110 | type: 'custom', |
119 | event: 'sophie:reload-services', | 111 | event: 'sophie:reload-services', |
@@ -139,8 +131,8 @@ function setupMainPackageWatcher(viteDevServer) { | |||
139 | return setupEsbuildWatcher( | 131 | return setupEsbuildWatcher( |
140 | 'main', | 132 | 'main', |
141 | [ | 133 | [ |
142 | serviceSharedPackageSource, | 134 | serviceSharedModule, |
143 | sharedPackageSource | 135 | sharedModule, |
144 | ], | 136 | ], |
145 | () => { | 137 | () => { |
146 | if (spawnProcess !== null) { | 138 | if (spawnProcess !== null) { |
@@ -174,13 +166,22 @@ async function setupDevEnvironment() { | |||
174 | viteDevServer.ws.send(event); | 166 | viteDevServer.ws.send(event); |
175 | } | 167 | } |
176 | }; | 168 | }; |
169 | |||
170 | const sharedWatcher = setupEsbuildWatcher('shared'); | ||
171 | const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); | ||
177 | await Promise.all([ | 172 | await Promise.all([ |
178 | setupEsbuildWatcher('shared'), | 173 | sharedWatcher.then(() => Promise.all([ |
179 | setupPreloadPackageWatcher(sendEvent), | 174 | setupPreloadPackageWatcher(sendEvent), |
180 | setupServicePackageWatcher('service-inject', sendEvent), | 175 | setupDevServer('renderer').then((devServer) => { |
181 | setupServicePackageWatcher('service-preload', sendEvent), | 176 | viteDevServer = devServer; |
177 | }), | ||
178 | ])), | ||
179 | serviceSharedWatcher.then(() => Promise.all([ | ||
180 | setupServicePackageWatcher('service-inject', sendEvent), | ||
181 | setupServicePackageWatcher('service-preload', sendEvent), | ||
182 | ])), | ||
182 | ]); | 183 | ]); |
183 | viteDevServer = await setupDevServer('renderer'); | 184 | |
184 | console.log('\ud83c\udf80 Sophie is starting up') | 185 | console.log('\ud83c\udf80 Sophie is starting up') |
185 | return setupMainPackageWatcher(viteDevServer); | 186 | return setupMainPackageWatcher(viteDevServer); |
186 | } | 187 | } |