@umijs/preset-umi 4.0.21 → 4.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/build.js +10 -0
- package/dist/commands/dev/depBuildWorker/depBuilder.js +1 -1
- package/dist/features/classPropertiesLoose/classPropertiesLoose.d.ts +3 -0
- package/dist/features/classPropertiesLoose/classPropertiesLoose.js +41 -0
- package/dist/features/configPlugins/configPlugins.js +4 -2
- package/dist/features/monorepo/redirect.js +9 -3
- package/dist/features/mpa/mpa.js +13 -6
- package/dist/features/vite/vite.js +6 -0
- package/dist/index.js +1 -0
- package/dist/utils/fileSizeReporter.d.ts +13 -0
- package/dist/utils/fileSizeReporter.js +138 -0
- package/package.json +12 -13
package/dist/commands/build.js
CHANGED
|
@@ -31,6 +31,7 @@ var import_getAssetsMap = require("./dev/getAssetsMap");
|
|
|
31
31
|
var import_getBabelOpts = require("./dev/getBabelOpts");
|
|
32
32
|
var import_getMarkupArgs = require("./dev/getMarkupArgs");
|
|
33
33
|
var import_printMemoryUsage = require("./dev/printMemoryUsage");
|
|
34
|
+
var import_fileSizeReporter = require("../utils/fileSizeReporter");
|
|
34
35
|
var bundlerWebpack = (0, import_lazyImportFromCurrentPkg.lazyImportFromCurrentPkg)("@umijs/bundler-webpack");
|
|
35
36
|
var bundlerVite = (0, import_lazyImportFromCurrentPkg.lazyImportFromCurrentPkg)("@umijs/bundler-vite");
|
|
36
37
|
var build_default = (api) => {
|
|
@@ -128,7 +129,16 @@ umi build --clean
|
|
|
128
129
|
if (api.config.vite) {
|
|
129
130
|
stats = await bundlerVite.build(opts);
|
|
130
131
|
} else {
|
|
132
|
+
const absOutputPath = (0, import_path.resolve)(opts.cwd, opts.config.outputPath || bundlerWebpack.DEFAULT_OUTPUT_PATH);
|
|
133
|
+
const previousFileSizes = (0, import_fileSizeReporter.measureFileSizesBeforeBuild)(absOutputPath);
|
|
131
134
|
stats = await bundlerWebpack.build(opts);
|
|
135
|
+
console.log();
|
|
136
|
+
import_utils.logger.info("File sizes after gzip:\n");
|
|
137
|
+
(0, import_fileSizeReporter.printFileSizesAfterBuild)({
|
|
138
|
+
webpackStats: stats,
|
|
139
|
+
previousSizeMap: previousFileSizes,
|
|
140
|
+
buildFolder: absOutputPath
|
|
141
|
+
});
|
|
132
142
|
}
|
|
133
143
|
if (!api.config.mpa) {
|
|
134
144
|
const assetsMap = api.config.vite ? {} : (0, import_getAssetsMap.getAssetsMap)({
|
|
@@ -110,10 +110,10 @@ var DepBuilderInWorker = class {
|
|
|
110
110
|
await this.buildWithWebpack(newOpts);
|
|
111
111
|
}
|
|
112
112
|
} catch (e) {
|
|
113
|
-
onBuildComplete();
|
|
114
113
|
import_worker_threads.parentPort.postMessage({
|
|
115
114
|
error: e
|
|
116
115
|
});
|
|
116
|
+
onBuildComplete();
|
|
117
117
|
throw e;
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/features/classPropertiesLoose/classPropertiesLoose.ts
|
|
20
|
+
var classPropertiesLoose_exports = {};
|
|
21
|
+
__export(classPropertiesLoose_exports, {
|
|
22
|
+
default: () => classPropertiesLoose_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(classPropertiesLoose_exports);
|
|
25
|
+
var classPropertiesLoose_default = (api) => {
|
|
26
|
+
api.describe({
|
|
27
|
+
key: "classPropertiesLoose",
|
|
28
|
+
config: {
|
|
29
|
+
schema(joi) {
|
|
30
|
+
return joi.object();
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
enableBy: api.EnableBy.config
|
|
34
|
+
});
|
|
35
|
+
api.modifyBabelPresetOpts((memo) => {
|
|
36
|
+
memo.classPropertiesLoose = {};
|
|
37
|
+
return memo;
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {});
|
|
@@ -60,8 +60,10 @@ var configPlugins_default = (api) => {
|
|
|
60
60
|
"react-dom/client": reactDOMPath
|
|
61
61
|
} : {},
|
|
62
62
|
"react-dom": reactDOMPath,
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
...userConfig.mpa ? {} : {
|
|
64
|
+
"react-router": (0, import_path.dirname)(require.resolve("react-router/package.json")),
|
|
65
|
+
"react-router-dom": (0, import_path.dirname)(require.resolve("react-router-dom/package.json"))
|
|
66
|
+
}
|
|
65
67
|
},
|
|
66
68
|
externals: {
|
|
67
69
|
...isLT18 && ((_a = userConfig.externals) == null ? void 0 : _a["react-dom"]) ? {
|
|
@@ -104,10 +104,16 @@ async function collectAllProjects(opts) {
|
|
|
104
104
|
}
|
|
105
105
|
var MONOREPO_FILE = ["pnpm-workspace.yaml", "lerna.json"];
|
|
106
106
|
function isMonorepo(opts) {
|
|
107
|
-
const
|
|
108
|
-
|
|
107
|
+
const pkgPath = (0, import_path.join)(opts.root, "package.json");
|
|
108
|
+
let pkg = {};
|
|
109
|
+
try {
|
|
110
|
+
pkg = require(pkgPath);
|
|
111
|
+
} catch (e) {
|
|
112
|
+
}
|
|
113
|
+
const pkgExist = (0, import_fs.existsSync)(pkgPath);
|
|
114
|
+
return pkgExist && (MONOREPO_FILE.some((file) => {
|
|
109
115
|
return (0, import_fs.existsSync)((0, import_path.join)(opts.root, file));
|
|
110
|
-
});
|
|
116
|
+
}) || (pkg == null ? void 0 : pkg.workspaces));
|
|
111
117
|
}
|
|
112
118
|
// Annotate the CommonJS export names for ESM import in node:
|
|
113
119
|
0 && (module.exports = {});
|
package/dist/features/mpa/mpa.js
CHANGED
|
@@ -38,7 +38,9 @@ var mpa_default = (api) => {
|
|
|
38
38
|
schema(Joi) {
|
|
39
39
|
return Joi.object({
|
|
40
40
|
template: Joi.string(),
|
|
41
|
-
|
|
41
|
+
layout: Joi.string(),
|
|
42
|
+
getConfigFromEntryFile: Joi.boolean(),
|
|
43
|
+
entry: Joi.object()
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
46
|
},
|
|
@@ -59,8 +61,9 @@ var mpa_default = (api) => {
|
|
|
59
61
|
}
|
|
60
62
|
const isReact18 = api.appData.react.version.startsWith("18.");
|
|
61
63
|
api.appData.mpa.entry.forEach((entry) => {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
+
const layout = entry.layout || api.config.mpa.layout;
|
|
65
|
+
const layoutImport = layout ? `import Layout from '${layout}';` : "";
|
|
66
|
+
const layoutJSX = layout ? `<Layout><App /></Layout>` : `<App />`;
|
|
64
67
|
const rootElement = `document.getElementById('${entry.mountElementId}')`;
|
|
65
68
|
const renderer = isReact18 ? `ReactDOM.createRoot(${rootElement}).render(${layoutJSX});` : `ReactDOM.render(${layoutJSX}, ${rootElement});`;
|
|
66
69
|
const reactDOMSource = isReact18 ? "react-dom/client" : "react-dom";
|
|
@@ -70,7 +73,7 @@ var mpa_default = (api) => {
|
|
|
70
73
|
content: `
|
|
71
74
|
import React from 'react';
|
|
72
75
|
import ReactDOM from '${reactDOMSource}';
|
|
73
|
-
import App from '${entry.file}';
|
|
76
|
+
import App from '${(0, import_utils.winPath)(entry.file)}';
|
|
74
77
|
${layoutImport}
|
|
75
78
|
${renderer}
|
|
76
79
|
`.trimStart()
|
|
@@ -121,19 +124,23 @@ async function collectEntryWithTimeCount(root, opts) {
|
|
|
121
124
|
}
|
|
122
125
|
async function collectEntry(root, opts) {
|
|
123
126
|
return await (0, import_fs.readdirSync)(root).reduce(async (memoP, dir) => {
|
|
127
|
+
var _a;
|
|
124
128
|
const memo = await memoP;
|
|
125
129
|
const absDir = (0, import_path.join)(root, dir);
|
|
126
130
|
if ((0, import_fs.existsSync)(absDir) && (0, import_fs.statSync)(absDir).isDirectory()) {
|
|
127
131
|
const indexFile = getIndexFile(absDir);
|
|
128
132
|
if (indexFile) {
|
|
129
133
|
const config = opts.getConfigFromEntryFile ? await getConfigFromEntryFile(indexFile) : await getConfig(indexFile);
|
|
134
|
+
const name = dir;
|
|
135
|
+
const globalConfig = (_a = opts.entry) == null ? void 0 : _a[dir];
|
|
130
136
|
memo.push({
|
|
131
|
-
name
|
|
137
|
+
name,
|
|
132
138
|
file: indexFile,
|
|
133
139
|
tmpFilePath: `mpa/${dir}${(0, import_path.extname)(indexFile)}`,
|
|
134
140
|
mountElementId: "root",
|
|
141
|
+
...globalConfig,
|
|
135
142
|
...config,
|
|
136
|
-
title: config.title || dir
|
|
143
|
+
title: (globalConfig == null ? void 0 : globalConfig.title) || config.title || dir
|
|
137
144
|
});
|
|
138
145
|
}
|
|
139
146
|
}
|
|
@@ -36,6 +36,12 @@ var vite_default = (api) => {
|
|
|
36
36
|
memo.alias["@fs"] = api.cwd;
|
|
37
37
|
return memo;
|
|
38
38
|
});
|
|
39
|
+
api.modifyDefaultConfig((memo) => {
|
|
40
|
+
if (api.env === "development") {
|
|
41
|
+
memo.polyfill = false;
|
|
42
|
+
}
|
|
43
|
+
return memo;
|
|
44
|
+
});
|
|
39
45
|
api.register({
|
|
40
46
|
key: "onBeforeCompiler",
|
|
41
47
|
stage: Number.POSITIVE_INFINITY,
|
package/dist/index.js
CHANGED
|
@@ -56,6 +56,7 @@ var src_default = () => {
|
|
|
56
56
|
require.resolve("./features/monorepo/redirect"),
|
|
57
57
|
require.resolve("./features/clickToComponent/clickToComponent"),
|
|
58
58
|
require.resolve("./features/legacy/legacy"),
|
|
59
|
+
require.resolve("./features/classPropertiesLoose/classPropertiesLoose"),
|
|
59
60
|
require.resolve("./commands/build"),
|
|
60
61
|
require.resolve("./commands/config/config"),
|
|
61
62
|
require.resolve("./commands/dev/dev"),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Stats } from '@umijs/bundler-webpack/compiled/webpack';
|
|
2
|
+
interface ISizes {
|
|
3
|
+
root: string;
|
|
4
|
+
sizes: Record<string, number>;
|
|
5
|
+
}
|
|
6
|
+
export declare function printFileSizesAfterBuild(opts: {
|
|
7
|
+
webpackStats: Stats;
|
|
8
|
+
previousSizeMap: ISizes;
|
|
9
|
+
buildFolder: string;
|
|
10
|
+
suggestMaxSize?: number;
|
|
11
|
+
}): void;
|
|
12
|
+
export declare function measureFileSizesBeforeBuild(dir: string): ISizes;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/utils/fileSizeReporter.ts
|
|
23
|
+
var fileSizeReporter_exports = {};
|
|
24
|
+
__export(fileSizeReporter_exports, {
|
|
25
|
+
measureFileSizesBeforeBuild: () => measureFileSizesBeforeBuild,
|
|
26
|
+
printFileSizesAfterBuild: () => printFileSizesAfterBuild
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(fileSizeReporter_exports);
|
|
29
|
+
var import_fs = __toESM(require("fs"));
|
|
30
|
+
var import_path = __toESM(require("path"));
|
|
31
|
+
var import_utils = require("@umijs/utils");
|
|
32
|
+
var gzipSize = import_utils.gzipSize.sync;
|
|
33
|
+
var WARN_GZIP_SIZE = 1024 * 1024;
|
|
34
|
+
function printFileSizesAfterBuild(opts) {
|
|
35
|
+
var _a;
|
|
36
|
+
const {
|
|
37
|
+
webpackStats,
|
|
38
|
+
previousSizeMap,
|
|
39
|
+
buildFolder,
|
|
40
|
+
suggestMaxSize = WARN_GZIP_SIZE
|
|
41
|
+
} = opts;
|
|
42
|
+
const { root, sizes } = previousSizeMap;
|
|
43
|
+
const assets = (_a = webpackStats.toJson({ all: false, assets: true }).assets) == null ? void 0 : _a.filter((asset) => canReadAsset(asset.name)).map((asset) => {
|
|
44
|
+
const content = import_fs.default.readFileSync(import_path.default.join(root, asset.name), {
|
|
45
|
+
encoding: "utf-8"
|
|
46
|
+
});
|
|
47
|
+
const size = gzipSize(content);
|
|
48
|
+
const key = removeFileNameHash(root, asset.name);
|
|
49
|
+
const previousSize = sizes[key];
|
|
50
|
+
const difference = getDifferenceLabel(size, previousSize);
|
|
51
|
+
return {
|
|
52
|
+
folder: import_path.default.join(import_path.default.basename(buildFolder), import_path.default.dirname(asset.name)),
|
|
53
|
+
name: import_path.default.basename(asset.name),
|
|
54
|
+
size,
|
|
55
|
+
sizeLabel: (0, import_utils.filesize)(size) + (difference ? " (" + difference + ")" : "")
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
if (!(assets == null ? void 0 : assets.length)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
assets.sort((a, b) => b.size - a.size);
|
|
62
|
+
const longestSizeLabelLength = Math.max(...assets.map((a) => (0, import_utils.stripAnsi)(a.sizeLabel).length));
|
|
63
|
+
let suggestBundleSplitting = false;
|
|
64
|
+
assets.forEach((asset) => {
|
|
65
|
+
let sizeLabel = asset.sizeLabel;
|
|
66
|
+
const sizeLength = (0, import_utils.stripAnsi)(sizeLabel).length;
|
|
67
|
+
if (sizeLength < longestSizeLabelLength) {
|
|
68
|
+
const rightPadding = " ".repeat(longestSizeLabelLength - sizeLength);
|
|
69
|
+
sizeLabel += rightPadding;
|
|
70
|
+
}
|
|
71
|
+
const isLarge = asset.size > suggestMaxSize;
|
|
72
|
+
if (isLarge && import_path.default.extname(asset.name) === ".js") {
|
|
73
|
+
suggestBundleSplitting = true;
|
|
74
|
+
}
|
|
75
|
+
console.log(" " + (isLarge ? import_utils.chalk.yellow(sizeLabel) : sizeLabel) + " " + import_utils.chalk.dim(asset.folder + import_path.default.sep) + import_utils.chalk.cyan(asset.name));
|
|
76
|
+
});
|
|
77
|
+
if (suggestBundleSplitting) {
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(import_utils.chalk.yellow("The bundle size is significantly larger than recommended."));
|
|
80
|
+
console.log(import_utils.chalk.yellow("Consider reducing it with code splitting: "), import_utils.chalk.cyan("https://umijs.org/blog/code-splitting"));
|
|
81
|
+
console.log(import_utils.chalk.yellow("You can also analyze the project dependencies: "), import_utils.chalk.cyan("https://umijs.org/docs/guides/env-variables#analyze"));
|
|
82
|
+
}
|
|
83
|
+
console.log();
|
|
84
|
+
}
|
|
85
|
+
var FIFTY_KILOBYTES = 1024 * 50;
|
|
86
|
+
function getDifferenceLabel(currentSize, previousSize) {
|
|
87
|
+
const difference = currentSize - previousSize;
|
|
88
|
+
const fileSize = !Number.isNaN(difference) ? (0, import_utils.filesize)(difference) : 0;
|
|
89
|
+
if (difference >= FIFTY_KILOBYTES) {
|
|
90
|
+
return import_utils.chalk.red("+" + fileSize);
|
|
91
|
+
} else if (difference < FIFTY_KILOBYTES && difference > 0) {
|
|
92
|
+
return import_utils.chalk.yellow("+" + fileSize);
|
|
93
|
+
} else if (difference < 0) {
|
|
94
|
+
return import_utils.chalk.green(fileSize);
|
|
95
|
+
} else {
|
|
96
|
+
return "";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function recursive(dir) {
|
|
100
|
+
const list = [];
|
|
101
|
+
if (import_fs.default.existsSync(dir) && import_fs.default.statSync(dir).isDirectory()) {
|
|
102
|
+
const files = import_fs.default.readdirSync(dir);
|
|
103
|
+
files.forEach((file) => {
|
|
104
|
+
const absPath = import_path.default.join(dir, file);
|
|
105
|
+
if (import_fs.default.statSync(absPath).isDirectory()) {
|
|
106
|
+
list.push(...recursive(absPath));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
list.push(absPath);
|
|
110
|
+
});
|
|
111
|
+
return list;
|
|
112
|
+
}
|
|
113
|
+
return list;
|
|
114
|
+
}
|
|
115
|
+
function canReadAsset(file) {
|
|
116
|
+
return /\.(js|css)$/.test(file) && !/service-worker\.js/.test(file) && !/precache-manifest\.[0-9a-f]+\.js/.test(file);
|
|
117
|
+
}
|
|
118
|
+
function removeFileNameHash(dir, fileName) {
|
|
119
|
+
return fileName.replace(dir, "").replace(/\\/g, "/").replace(/\/?(.*)(\.[0-9a-f]+)(\.chunk)?(\.js|\.css)/, (_match, p1, _p2, _p3, p4) => p1 + p4).replace(/^\//, "");
|
|
120
|
+
}
|
|
121
|
+
function measureFileSizesBeforeBuild(dir) {
|
|
122
|
+
const fileNames = recursive(dir);
|
|
123
|
+
const sizes = fileNames.filter(canReadAsset).reduce((memo, fileName) => {
|
|
124
|
+
const content = import_fs.default.readFileSync(fileName, { encoding: "utf-8" });
|
|
125
|
+
const key = removeFileNameHash(dir, fileName);
|
|
126
|
+
memo[key] = gzipSize(content);
|
|
127
|
+
return memo;
|
|
128
|
+
}, {});
|
|
129
|
+
return {
|
|
130
|
+
root: dir,
|
|
131
|
+
sizes
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
135
|
+
0 && (module.exports = {
|
|
136
|
+
measureFileSizesBeforeBuild,
|
|
137
|
+
printFileSizesAfterBuild
|
|
138
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umijs/preset-umi",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.22",
|
|
4
4
|
"description": "@umijs/preset-umi",
|
|
5
5
|
"homepage": "https://github.com/umijs/umi/tree/master/packages/preset-umi#readme",
|
|
6
6
|
"bugs": "https://github.com/umijs/umi/issues",
|
|
@@ -25,20 +25,19 @@
|
|
|
25
25
|
"test": "umi-scripts jest-turbo"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@
|
|
29
|
-
"@umijs/
|
|
30
|
-
"@umijs/
|
|
31
|
-
"@umijs/bundler-
|
|
32
|
-
"@umijs/bundler-
|
|
33
|
-
"@umijs/
|
|
34
|
-
"@umijs/core": "4.0.21",
|
|
28
|
+
"@umijs/ast": "4.0.22",
|
|
29
|
+
"@umijs/babel-preset-umi": "4.0.22",
|
|
30
|
+
"@umijs/bundler-utils": "4.0.22",
|
|
31
|
+
"@umijs/bundler-vite": "4.0.22",
|
|
32
|
+
"@umijs/bundler-webpack": "4.0.22",
|
|
33
|
+
"@umijs/core": "4.0.22",
|
|
35
34
|
"@umijs/did-you-know": "^1.0.0",
|
|
36
35
|
"@umijs/history": "5.3.1",
|
|
37
|
-
"@umijs/mfsu": "4.0.
|
|
38
|
-
"@umijs/plugin-run": "4.0.
|
|
39
|
-
"@umijs/renderer-react": "4.0.
|
|
40
|
-
"@umijs/server": "4.0.
|
|
41
|
-
"@umijs/utils": "4.0.
|
|
36
|
+
"@umijs/mfsu": "4.0.22",
|
|
37
|
+
"@umijs/plugin-run": "4.0.22",
|
|
38
|
+
"@umijs/renderer-react": "4.0.22",
|
|
39
|
+
"@umijs/server": "4.0.22",
|
|
40
|
+
"@umijs/utils": "4.0.22",
|
|
42
41
|
"click-to-react-component": "^1.0.8",
|
|
43
42
|
"core-js": "3.22.4",
|
|
44
43
|
"current-script-polyfill": "1.0.0",
|