Skip to content

Commit 0c91d35

Browse files
authored
[ Vite ] Regroup ignore-*-imports Vite plugin inside a vite-extension (#2999)
## Motivation for the change, related issues Based on pull request #2591 Intl dynamic extension added a third file where its import had to be ignored : `icu.dat`. The pull request created a third `ignore-data-imports` Vite plugin. This pull request aims to regroup every `ignore-{extension}-imports` into a unique Vite extension. ## Implementation details Regrouping repeatedly copy pasted vite plugins inside a vite extension file named `vite-ignore-imports.ts`. ## Testing Instructions CI - `test-built-npm-packages` should not fail
1 parent a93dadf commit 0c91d35

File tree

10 files changed

+60
-136
lines changed

10 files changed

+60
-136
lines changed

packages/php-wasm/web/vite.config.ts

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import dts from 'vite-plugin-dts';
66
// eslint-disable-next-line @nx/enforce-module-boundaries
77
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
88
// eslint-disable-next-line @nx/enforce-module-boundaries
9-
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
9+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
1010
// eslint-disable-next-line @nx/enforce-module-boundaries
1111
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
12+
// eslint-disable-next-line @nx/enforce-module-boundaries
13+
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
1214

1315
export default defineConfig(({ command }) => {
1416
return {
@@ -23,42 +25,9 @@ export default defineConfig(({ command }) => {
2325
tsconfigPath: path.join(__dirname, 'tsconfig.lib.json'),
2426
pathsToAliases: false,
2527
}),
26-
{
27-
name: 'ignore-wasm-imports',
28-
29-
load(id: string): any {
30-
if (id?.endsWith('.wasm')) {
31-
return {
32-
code: 'export default {}',
33-
map: null,
34-
};
35-
}
36-
},
37-
},
38-
{
39-
name: 'ignore-data-imports',
40-
41-
load(id: string): any {
42-
if (id?.endsWith('.dat')) {
43-
return {
44-
code: 'export default {}',
45-
map: null,
46-
};
47-
}
48-
},
49-
},
50-
{
51-
name: 'ignore-lib-imports',
52-
53-
load(id: string): any {
54-
if (id?.endsWith('.so')) {
55-
return {
56-
code: 'export default {}',
57-
map: null,
58-
};
59-
}
60-
},
61-
},
28+
viteIgnoreImports({
29+
extensions: ['wasm', 'so', 'dat'],
30+
}),
6231
/**
6332
* Vite can't extract static asset in the library mode:
6433
* https://github.com/vitejs/vite/issues/3295

packages/playground/client/vite.config.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ import { defineConfig } from 'vite';
33
import dts from 'vite-plugin-dts';
44
import { join } from 'path';
55
// eslint-disable-next-line @nx/enforce-module-boundaries
6-
import ignoreWasmImports from '../ignore-wasm-imports';
7-
// eslint-disable-next-line @nx/enforce-module-boundaries
8-
import ignoreLibImports from '../ignore-lib-imports';
9-
// eslint-disable-next-line @nx/enforce-module-boundaries
10-
import ignoreDataImports from '../ignore-data-imports';
11-
// eslint-disable-next-line @nx/enforce-module-boundaries
126
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
137
// eslint-disable-next-line @nx/enforce-module-boundaries
8+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
9+
// eslint-disable-next-line @nx/enforce-module-boundaries
1410
import { buildVersionPlugin } from '../../vite-extensions/vite-build-version';
1511
// eslint-disable-next-line @nx/enforce-module-boundaries
1612
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
@@ -44,9 +40,9 @@ export default defineConfig({
4440
tsconfigPath: join(__dirname, 'tsconfig.lib.json'),
4541
pathsToAliases: false,
4642
}),
47-
ignoreWasmImports(),
48-
ignoreLibImports(),
49-
ignoreDataImports(),
43+
viteIgnoreImports({
44+
extensions: ['wasm', 'so', 'dat'],
45+
}),
5046
...viteGlobalExtensions,
5147
// @wp-playground/client doesn't actually use the remote-config virtual
5248
// module, @wp-playground/remote package does. @wp-playground/client imports

packages/playground/ignore-data-imports.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/playground/ignore-lib-imports.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/playground/ignore-wasm-imports.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/playground/storage/vite.config.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { defineConfig } from 'vite';
33
// eslint-disable-next-line @nx/enforce-module-boundaries
44
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
55
// eslint-disable-next-line @nx/enforce-module-boundaries
6-
import ignoreWasmImports from '../ignore-wasm-imports';
6+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
77
// eslint-disable-next-line @nx/enforce-module-boundaries
88
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
99
// eslint-disable-next-line @nx/enforce-module-boundaries
@@ -24,8 +24,9 @@ export default defineConfig({
2424
viteTsConfigPaths({
2525
root: '../../../',
2626
}),
27-
ignoreWasmImports(),
28-
27+
viteIgnoreImports({
28+
extensions: ['wasm'],
29+
}),
2930
...viteGlobalExtensions,
3031
],
3132

packages/playground/sync/vite.config.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
// eslint-disable-next-line @nx/enforce-module-boundaries
33
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
44
// eslint-disable-next-line @nx/enforce-module-boundaries
5-
import ignoreWasmImports from '../ignore-wasm-imports';
6-
// eslint-disable-next-line @nx/enforce-module-boundaries
7-
import ignoreDataImports from '../ignore-data-imports';
5+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
86
// eslint-disable-next-line @nx/enforce-module-boundaries
97
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
108
// eslint-disable-next-line @nx/enforce-module-boundaries
@@ -25,8 +23,9 @@ export default {
2523
viteTsConfigPaths({
2624
root: '../../../',
2725
}),
28-
ignoreWasmImports(),
29-
ignoreDataImports(),
26+
viteIgnoreImports({
27+
extensions: ['wasm', 'dat'],
28+
}),
3029

3130
...viteGlobalExtensions,
3231
],

packages/playground/website-extras/vite.config.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import react from '@vitejs/plugin-react';
44
// eslint-disable-next-line @nx/enforce-module-boundaries
55
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
66
// eslint-disable-next-line @nx/enforce-module-boundaries
7-
import ignoreWasmImports from '../ignore-wasm-imports';
8-
// eslint-disable-next-line @nx/enforce-module-boundaries
9-
import ignoreDataImports from '../ignore-data-imports';
7+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
108
// eslint-disable-next-line @nx/enforce-module-boundaries
119
import {
1210
websiteExtrasDevServerPort,
@@ -64,8 +62,9 @@ export default defineConfig(({ mode }) => {
6462
viteTsConfigPaths({
6563
root: '../../../',
6664
}),
67-
ignoreWasmImports(),
68-
ignoreDataImports(),
65+
viteIgnoreImports({
66+
extensions: ['wasm', 'dat'],
67+
}),
6968
...viteGlobalExtensions,
7069
buildVersionPlugin('website-config'),
7170
virtualModule({

packages/playground/website/vite.config.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@ import react from '@vitejs/plugin-react';
55
// eslint-disable-next-line @nx/enforce-module-boundaries
66
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
77
// eslint-disable-next-line @nx/enforce-module-boundaries
8-
import ignoreWasmImports from '../ignore-wasm-imports';
9-
// eslint-disable-next-line @nx/enforce-module-boundaries
10-
import ignoreLibImports from '../ignore-lib-imports';
11-
// eslint-disable-next-line @nx/enforce-module-boundaries
12-
import ignoreDataImports from '../ignore-data-imports';
8+
import { viteIgnoreImports } from '../../vite-extensions/vite-ignore-imports';
139
// eslint-disable-next-line @nx/enforce-module-boundaries
1410
import {
1511
websiteDevServerHost,
@@ -100,9 +96,9 @@ export default defineConfig(({ command, mode }) => {
10096
viteTsConfigPaths({
10197
root: '../../../',
10298
}),
103-
ignoreWasmImports(),
104-
ignoreLibImports(),
105-
ignoreDataImports(),
99+
viteIgnoreImports({
100+
extensions: ['wasm', 'so', 'dat'],
101+
}),
106102
...viteGlobalExtensions,
107103
buildVersionPlugin('website-config'),
108104
virtualModule({
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import type { Plugin } from 'vite';
2+
3+
export interface IgnoreImportsOptions {
4+
extensions: string[];
5+
}
6+
7+
export function viteIgnoreImports(options: IgnoreImportsOptions): Plugin {
8+
return {
9+
/**
10+
* Due to the way vite works, specific extension files are resolved by
11+
* rollup even in modules that do not import them directly.
12+
* For example, importing `@wp-playground/client` that has a dependency
13+
* on `@php-wasm/web` will lead to the following error:
14+
*
15+
* Could not load /{filename}.{extension}
16+
*
17+
* This plugin turns specified extension files into noop imports to fix
18+
* the bundling of dependent packages.
19+
*/
20+
name: 'vite-ignore-imports',
21+
22+
load(id) {
23+
if (options.extensions.some((ext) => id.endsWith(`.${ext}`))) {
24+
return {
25+
code: 'export default {};',
26+
map: null,
27+
};
28+
}
29+
30+
return null;
31+
},
32+
};
33+
}

0 commit comments

Comments
 (0)