From 4662ee8da7cba6a2adf65db7366e8bc214a367b9 Mon Sep 17 00:00:00 2001 From: forehalo Date: Mon, 28 Apr 2025 12:25:13 +0000 Subject: [PATCH] chore: add crossorigin to resource tags (#12031) ## Summary by CodeRabbit - **New Features** - Added the crossorigin attribute to all CSS and JavaScript tags in generated HTML, improving compatibility for cross-origin resource loading. - **Tests** - Updated tests to verify the presence of the crossorigin attribute in script tags. --- .../server/src/__tests__/doc/renderer.spec.ts | 4 +-- .../src/core/doc-renderer/controller.ts | 4 +-- tools/cli/src/webpack/html-plugin.ts | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/backend/server/src/__tests__/doc/renderer.spec.ts b/packages/backend/server/src/__tests__/doc/renderer.spec.ts index 8189cbcec1..f8fb832a0e 100644 --- a/packages/backend/server/src/__tests__/doc/renderer.spec.ts +++ b/packages/backend/server/src/__tests__/doc/renderer.spec.ts @@ -64,7 +64,7 @@ test('should render correct html', async t => { t.true( res.text.includes( - `` + `` ) ); }); @@ -78,7 +78,7 @@ test.skip('should render correct mobile html', async t => { t.true( res.text.includes( - `` + `` ) ); }); diff --git a/packages/backend/server/src/core/doc-renderer/controller.ts b/packages/backend/server/src/core/doc-renderer/controller.ts index d54f179248..e9b8c11419 100644 --- a/packages/backend/server/src/core/doc-renderer/controller.ts +++ b/packages/backend/server/src/core/doc-renderer/controller.ts @@ -194,11 +194,11 @@ export class DocRendererController { ${Object.entries(envMeta) .map(([key, val]) => ``) .join('\n')} - ${assets.css.map(url => ``).join('\n')} + ${assets.css.map(url => ``).join('\n')}
- ${assets.js.map(url => ``).join('\n')} + ${assets.js.map(url => ``).join('\n')} `; diff --git a/tools/cli/src/webpack/html-plugin.ts b/tools/cli/src/webpack/html-plugin.ts index b710cae85e..5f1838c116 100644 --- a/tools/cli/src/webpack/html-plugin.ts +++ b/tools/cli/src/webpack/html-plugin.ts @@ -81,6 +81,7 @@ function getHTMLPluginOptions(BUILD_CONFIG: BUILD_CONFIG_TYPE) { minify: false, templateParameters: templateParams, chunks: ['app'], + scriptLoading: 'blocking', } satisfies HTMLPlugin.Options; } @@ -154,6 +155,27 @@ const GlobalErrorHandlerPlugin = { }, }; +const CorsPlugin = { + apply(compiler: Compiler) { + compiler.hooks.compilation.tap('html-js-cors-plugin', compilation => { + HTMLPlugin.getHooks(compilation).alterAssetTags.tap( + 'html-js-cors-plugin', + options => { + if (options.publicPath !== '/') { + options.assetTags.scripts.forEach(script => { + script.attributes.crossorigin = true; + }); + options.assetTags.styles.forEach(style => { + style.attributes.crossorigin = true; + }); + } + return options; + } + ); + }); + }, +}; + export function createHTMLPlugins( BUILD_CONFIG: BUILD_CONFIG_TYPE, config: CreateHTMLPluginConfig @@ -206,6 +228,10 @@ export function createHTMLPlugins( ); } + if (!BUILD_CONFIG.isElectron) { + plugins.push(CorsPlugin); + } + if (config.emitAssetsManifest) { plugins.push(AssetsManifestPlugin); }