diff --git a/.github/workflows/pr-checker.yml b/.github/workflows/pr-checker.yml index d7867b83ed78..7e69423a9b6d 100644 --- a/.github/workflows/pr-checker.yml +++ b/.github/workflows/pr-checker.yml @@ -1,7 +1,7 @@ name: PullRequest Checker on: - pull_request_target: + pull_request: types: - closed paths-ignore: diff --git a/docs/docs/docs/api/config.md b/docs/docs/docs/api/config.md index 1be5d8de4667..20e20f612716 100644 --- a/docs/docs/docs/api/config.md +++ b/docs/docs/docs/api/config.md @@ -1249,6 +1249,21 @@ proxy: { 配置路由。更多信息,请查看 [配置路由](../guides/routes#配置路由) +## routeLoader + +- 类型:`{ moduleType: 'esm' | 'cjs' }` +- 默认值:`{ moduleType: 'esm' }` + +配置路由加载方式。moduleType 配置为 'cjs' 会用 `require` 的方式加载路由组件。 + +```ts +// moduleType: esm +'index': React.lazy(() => import(/* webpackChunkName: "p__index" */'../../pages/index.tsx')), + +// moduleType: cjs +'index': React.lazy(() => Promise.resolve(require('../../pages/index.tsx'))), +``` + ## run - 类型:`{ globals: string[] }` diff --git a/docs/docs/docs/max/micro-frontend.md b/docs/docs/docs/max/micro-frontend.md index 3d44b3a4f793..9e4bed0ad69a 100644 --- a/docs/docs/docs/max/micro-frontend.md +++ b/docs/docs/docs/max/micro-frontend.md @@ -516,13 +516,13 @@ export default function Page() { 如果您没有使用 antd 作为项目组件库,或希望覆盖默认的加载动画样式时,可以设置一个自定义的加载组件 `loader` 作为子应用的加载动画。 -如果通过路由的模式引入子应用,可以配置如下: +通过路由的模式引入的子应用,目前只支持在运行时配置,代码如下: ```tsx -// .umirc.ts +// .app.tsx import CustomLoader from 'src/components/CustomLoader'; -export default { +export const qiankun = () => ({ routes: [ { path: '/app1', @@ -532,7 +532,7 @@ export default { }, }, ], -}; +}); ``` 如果通过组件的模式引入子应用,直接将 `loader` 作为参数传入即可: @@ -553,6 +553,21 @@ export default function Page() { 其中,`loading` 为 `boolean` 类型参数,为 `true` 时表示仍在加载状态,为 `false` 时表示加载状态已结束。 +如果多个子应用同时存在自定义 loading 的诉求,每个都配置一遍是比较繁琐的,此时可以通过定义主应用的配置来解决,比如说: +```ts +// .umirc.ts +qiankun: { + master: { + loader: '@/CustomLoader', + }, +}, +``` +其中,`loader` 为文件路径,统一约定放在 [src 目录](../guides/directory-structure.md#src-目录) 下,在 umi 中 `@` 即代表 `src` 目录。 + +`CustomLoader` 跟上述实现一致,接收一个 `loading` 为 `boolean` 类型的参数。 + +注意:`master.loader` 不默认开启加载动画,开启动画需要将 `autoSetLoading` 设置为 `true`。 + ### 子应用错误捕获 启用此能力后,当子应用加载出现异常时,会自动显示错误信息。 @@ -668,6 +683,7 @@ export default { | 属性 | 必填 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | --- | | `enable` | 否 | 启用 Qiankun 微应用插件,设置为 `false` 时为不启用 | `boolean` | `undefined` | +| `loader` | 否 | 统一配置微应用加载动画的文件,设置文件路径即可 | `string` | - | | `apps` | 是 | 微应用配置 | [`App[]`](#app) | `undefined` | | `routes` | 否 | 微应用运行时的路由 | [`Route[]`](#route) | `undefined` | | `sandbox` | 否 | 是否开启沙箱模式 | `boolean \| { strictStyleIsolation: boolean, experimentalStyleIsolation: boolean }` | `true` | diff --git a/examples/boilerplate/plugin.ts b/examples/boilerplate/plugin.ts index 93dfc70f07c7..97c6621f0a11 100644 --- a/examples/boilerplate/plugin.ts +++ b/examples/boilerplate/plugin.ts @@ -30,4 +30,11 @@ export default (api: IApi) => { args; // console.log('> onCheckCode', args); }); + + api.addHTMLScripts({ + async fn() { + return [`console.log('async scripts hello world')`]; + }, + stage: 100, + }); }; diff --git a/lerna.json b/lerna.json index 0dff584c3eda..ee6b1581e454 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "workspaces": ["packages/*"] } diff --git a/packages/ast/package.json b/packages/ast/package.json index 9743c24c29bc..c2a033ff239c 100644 --- a/packages/ast/package.json +++ b/packages/ast/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/ast", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/ast", "homepage": "https://github.com/umijs/umi/tree/master/packages/ast#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/babel-preset-umi/package.json b/packages/babel-preset-umi/package.json index df27985c0eb7..c2b83b0f4a08 100644 --- a/packages/babel-preset-umi/package.json +++ b/packages/babel-preset-umi/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/babel-preset-umi", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "Official babel preset for umi.", "homepage": "https://github.com/umijs/umi/tree/master/packages/babel-preset-umi#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/bundler-esbuild/package.json b/packages/bundler-esbuild/package.json index 1e9ab40cf83d..a6478f43b658 100644 --- a/packages/bundler-esbuild/package.json +++ b/packages/bundler-esbuild/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/bundler-esbuild", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/bundler-esbuild", "homepage": "https://github.com/umijs/umi/tree/master/packages/bundler-esbuild#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/bundler-utils/package.json b/packages/bundler-utils/package.json index 3982708bba2d..5a158f8a1616 100644 --- a/packages/bundler-utils/package.json +++ b/packages/bundler-utils/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/bundler-utils", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "homepage": "https://github.com/umijs/umi/tree/master/packages/bundler-utils#readme", "bugs": "https://github.com/umijs/umi/issues", "repository": { diff --git a/packages/bundler-vite/package.json b/packages/bundler-vite/package.json index 089b5b19292d..cabca9722aa2 100644 --- a/packages/bundler-vite/package.json +++ b/packages/bundler-vite/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/bundler-vite", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/bundler-vite", "homepage": "https://github.com/umijs/umi/tree/master/packages/bundler-vite#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/bundler-webpack/package.json b/packages/bundler-webpack/package.json index cbdad6a6c853..1390fd1b80f7 100644 --- a/packages/bundler-webpack/package.json +++ b/packages/bundler-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/bundler-webpack", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/bundler-webpack", "homepage": "https://github.com/umijs/umi/tree/master/packages/bundler-webpack#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/core/package.json b/packages/core/package.json index a80b7b4901d1..519da2b76dc6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/core", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "homepage": "https://github.com/umijs/umi/tree/master/packages/core#readme", "bugs": "https://github.com/umijs/umi/issues", "repository": { diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 56a2a20a4925..4b1a5ce37f5f 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -99,10 +99,10 @@ export interface IAdd { (args: { fn: { (args: T): Promise; - name?: string; - before?: string | string[]; - stage?: number; }; + name?: string; + before?: string | string[]; + stage?: number; }): void; } diff --git a/packages/create-umi/package.json b/packages/create-umi/package.json index ccc702e8cbd2..b5a7a268e9c6 100644 --- a/packages/create-umi/package.json +++ b/packages/create-umi/package.json @@ -1,6 +1,6 @@ { "name": "create-umi", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "create-umi", "homepage": "https://github.com/umijs/umi/tree/master/packages/create-umi#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/lint/package.json b/packages/lint/package.json index 56729172e8c7..430b28c1fc4f 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/lint", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/lint", "homepage": "https://github.com/umijs/umi/tree/master/packages/lint#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/max/package.json b/packages/max/package.json index 6e522c336343..75cef3a71c7c 100644 --- a/packages/max/package.json +++ b/packages/max/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/max", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/max", "homepage": "https://github.com/umijs/umi/tree/master/packages/max#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/mfsu/package.json b/packages/mfsu/package.json index 68cfa133c9bb..2950349f9300 100644 --- a/packages/mfsu/package.json +++ b/packages/mfsu/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/mfsu", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/mfsu", "homepage": "https://github.com/umijs/umi/tree/master/packages/mfsu#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/plugin-docs/package.json b/packages/plugin-docs/package.json index 5c72609f1ad8..a9991ec864dc 100644 --- a/packages/plugin-docs/package.json +++ b/packages/plugin-docs/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/plugin-docs", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/plugin-docs", "homepage": "https://github.com/umijs/umi/tree/master/packages/plugin-docs#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/plugin-run/package.json b/packages/plugin-run/package.json index 4cd73c4afefa..b38f7e73c413 100644 --- a/packages/plugin-run/package.json +++ b/packages/plugin-run/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/plugin-run", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/plugin-run", "homepage": "https://github.com/umijs/umi/tree/master/packages/plugin-run#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/plugins/libs/qiankun/master/types.ts b/packages/plugins/libs/qiankun/master/types.ts index d8f5363d987b..c7dde577d4a6 100644 --- a/packages/plugins/libs/qiankun/master/types.ts +++ b/packages/plugins/libs/qiankun/master/types.ts @@ -24,6 +24,7 @@ export type MicroAppRoute = { export type MasterOptions = { enable?: boolean; + loader?: string; apps?: App[]; routes?: MicroAppRoute[]; lifeCycles?: FrameworkLifeCycles; diff --git a/packages/plugins/package.json b/packages/plugins/package.json index b3a380ca7bb5..739ff8fdea71 100644 --- a/packages/plugins/package.json +++ b/packages/plugins/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/plugins", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/plugins", "homepage": "https://github.com/umijs/umi/tree/master/packages/plugins#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/plugins/src/qiankun/master.ts b/packages/plugins/src/qiankun/master.ts index d3bb213f019f..b7d6ce697533 100644 --- a/packages/plugins/src/qiankun/master.ts +++ b/packages/plugins/src/qiankun/master.ts @@ -1,3 +1,4 @@ +import assert from 'assert'; import { readFileSync } from 'fs'; import { dirname, join } from 'path'; import { IApi, RUNTIME_TYPE_FILE_NAME } from 'umi'; @@ -18,6 +19,15 @@ export function isMasterEnable(opts: { userConfig: any }) { return !!process.env.INITIAL_QIANKUN_MASTER_OPTIONS; } +function getCustomLoader(api: IApi) { + const loader = api.config.qiankun?.master?.loader; + assert( + !loader || loader.startsWith?.('@/'), + '[@umijs/plugin-qiankun]: loader only support root path, eg: @/loading', + ); + return loader; +} + export default (api: IApi) => { api.describe({ key: 'qiankun-master', @@ -113,10 +123,13 @@ export const setMasterOptions = (newOpts) => options = ({ ...options, ...newOpts api.writeTmpFile({ path: 'MicroAppLoader.tsx', - // 开启了 antd 插件的时候,使用 antd 的 loader 组件,否则提示用户必须设置一个自定义的 loader 组件 - content: api.isPluginEnable('antd') + content: getCustomLoader(api) + ? // 用户自定义的 loading 优先级最高 + `export { default } from '${getCustomLoader(api)}';` + : api.isPluginEnable('antd') ? getFileContent('AntdLoader.tsx') - : `export default function Loader() { console.warn(\`[plugins/qiankun]: Seems like you'r not using @umijs/plugin-antd, you need to provide a custom loader or set autoSetLoading false to shut down this warning!\`); return null; }`, + : // 开启了 antd 插件的时候,使用 antd 的 loader 组件,否则提示用户必须设置一个自定义的 loader 组件 + `export default function Loader() { console.warn(\`[plugins/qiankun]: Seems like you'r not using @umijs/plugin-antd, you need to provide a custom loader or set autoSetLoading false to shut down this warning!\`); return null; }`, }); [ diff --git a/packages/preset-umi/package.json b/packages/preset-umi/package.json index b20bda227e0e..7886307259e5 100644 --- a/packages/preset-umi/package.json +++ b/packages/preset-umi/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/preset-umi", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/preset-umi", "homepage": "https://github.com/umijs/umi/tree/master/packages/preset-umi#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/preset-umi/src/features/configPlugins/configPlugins.ts b/packages/preset-umi/src/features/configPlugins/configPlugins.ts index 9b6574f0cacf..2034004d5bef 100644 --- a/packages/preset-umi/src/features/configPlugins/configPlugins.ts +++ b/packages/preset-umi/src/features/configPlugins/configPlugins.ts @@ -72,6 +72,7 @@ export default (api: IApi) => { svgr: {}, ignoreMomentLocale: true, mfsu: { strategy: 'eager' }, + routeLoader: { moduleType: 'esm' }, }; const bundleSchemas = api.config.vite diff --git a/packages/preset-umi/src/features/configPlugins/schema.ts b/packages/preset-umi/src/features/configPlugins/schema.ts index 3a45da24b225..407673b5a629 100644 --- a/packages/preset-umi/src/features/configPlugins/schema.ts +++ b/packages/preset-umi/src/features/configPlugins/schema.ts @@ -81,6 +81,10 @@ export function getSchemas(): Record any> { message: 'publicPath must be "auto" or end with /', }), reactRouter5Compat: ({ zod }) => zod.union([zod.boolean(), zod.object({})]), + routeLoader: ({ zod }) => + zod.object({ + moduleType: zod.enum(['esm', 'cjs']), + }), routes: ({ zod }) => { const routeSchema: any = zod.union([ zod diff --git a/packages/preset-umi/src/features/tmpFiles/routes.ts b/packages/preset-umi/src/features/tmpFiles/routes.ts index be5023d7b181..fc127536b4ac 100644 --- a/packages/preset-umi/src/features/tmpFiles/routes.ts +++ b/packages/preset-umi/src/features/tmpFiles/routes.ts @@ -240,6 +240,14 @@ export async function getRouteComponents(opts: { return `'${key}': require('${winPath(path)}').default,`; } + // ref: https://github.com/umijs/umi/issues/11466 + if (opts.api.config.routeLoader?.moduleType === 'cjs') { + return useSuspense + ? `'${key}': React.lazy(() => Promise.resolve(require('${winPath( + path, + )}'))),` + : `'${key}': () => Promise.resolve(require('${winPath(path)}')),`; + } return useSuspense ? `'${key}': React.lazy(() => import(/* webpackChunkName: "${webpackChunkName}" */'${winPath( path, diff --git a/packages/preset-vue/package.json b/packages/preset-vue/package.json index b16f39966e17..fb39ea05725f 100644 --- a/packages/preset-vue/package.json +++ b/packages/preset-vue/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/preset-vue", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/preset-vue", "homepage": "https://github.com/umijs/umi/tree/master/packages/preset-vue#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/renderer-react/package.json b/packages/renderer-react/package.json index 7c479335867b..59a1a392da04 100644 --- a/packages/renderer-react/package.json +++ b/packages/renderer-react/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/renderer-react", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/renderer-react", "homepage": "https://github.com/umijs/umi/tree/master/packages/renderer-react#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/renderer-vue/package.json b/packages/renderer-vue/package.json index 2bd12ac21706..342395c1a8c5 100644 --- a/packages/renderer-vue/package.json +++ b/packages/renderer-vue/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/renderer-vue", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/renderer-vue", "homepage": "https://github.com/umijs/umi/tree/master/packages/renderer-vue#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/server/package.json b/packages/server/package.json index 1fe51cd26fbf..b12c52f98dfc 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/server", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/server", "homepage": "https://github.com/umijs/umi/tree/master/packages/server#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/testing/package.json b/packages/testing/package.json index 15afe4c3dd06..b8ebb251963f 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/test", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/test", "homepage": "https://github.com/umijs/umi/tree/master/packages/testing#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/umi/package.json b/packages/umi/package.json index 1a4178a7fef1..3b47843664b6 100644 --- a/packages/umi/package.json +++ b/packages/umi/package.json @@ -1,6 +1,6 @@ { "name": "umi", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "umi", "homepage": "https://github.com/umijs/umi/tree/master/packages/umi#readme", "bugs": "https://github.com/umijs/umi/issues", diff --git a/packages/utils/package.json b/packages/utils/package.json index 1d138be09629..b087f6087023 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/utils", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "homepage": "https://github.com/umijs/umi/tree/master/packages/utils#readme", "bugs": "https://github.com/umijs/umi/issues", "repository": { diff --git a/packages/zod2ts/package.json b/packages/zod2ts/package.json index 7c279de50257..591ec5b09e07 100644 --- a/packages/zod2ts/package.json +++ b/packages/zod2ts/package.json @@ -1,6 +1,6 @@ { "name": "@umijs/zod2ts", - "version": "4.0.74", + "version": "4.0.0-canary.20230811.1", "description": "@umijs/zod2ts", "homepage": "https://github.com/umijs/umi/tree/master/packages/zod2ts#readme", "bugs": "https://github.com/umijs/umi/issues",