@modern-js/builder 2.10.0 → 2.12.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,63 @@
1
1
  # @modern-js/builder
2
2
 
3
+ ## 2.12.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [c2ca6c8]
8
+ - Updated dependencies [6d86e34]
9
+ - Updated dependencies [fef3394]
10
+ - @modern-js/utils@2.12.0
11
+ - @modern-js/builder-shared@2.12.0
12
+
13
+ ## 2.11.0
14
+
15
+ ### Patch Changes
16
+
17
+ - cfb058f: fix(builder): remove duplicated babel-plugin-import
18
+
19
+ fix(builder): 移除重复注册的 babel-plugin-import
20
+
21
+ - 55b07fd: feat(builder): support output.assetsRetry in rspack-provider
22
+
23
+ feat(builder): 在 rspack-provider 中支持 output.assetsRetry 配置能力
24
+
25
+ - 8b90c79: fix(builder): should preserve viewBox when minify svg
26
+
27
+ fix(builder): 修复压缩 svg 导致 viewBox 丢失的问题
28
+
29
+ - 3171c9d: feat(builder): print total file size after build
30
+
31
+ feat(builder): 构建后输出文件体积的总和
32
+
33
+ - cd1040f: feat: use generated default config objects instead of global objects
34
+ feat: 默认配置项使用动态生成替代全局对象
35
+ - b71cef1: feat(builder): support setting forceSplitting to be an object
36
+
37
+ feat(builder): 支持将 forceSplitting 设置为一个对象
38
+
39
+ - Updated dependencies [adcedad]
40
+ - Updated dependencies [cfb058f]
41
+ - Updated dependencies [a9c6083]
42
+ - Updated dependencies [55b07fd]
43
+ - Updated dependencies [0bd018b]
44
+ - Updated dependencies [8b90c79]
45
+ - Updated dependencies [a8c08c3]
46
+ - Updated dependencies [3aa318d]
47
+ - Updated dependencies [5d624fd]
48
+ - Updated dependencies [e2466a1]
49
+ - Updated dependencies [53b0a63]
50
+ - Updated dependencies [02bb383]
51
+ - Updated dependencies [381a3b9]
52
+ - Updated dependencies [7a60f10]
53
+ - Updated dependencies [cd1040f]
54
+ - Updated dependencies [e262a99]
55
+ - Updated dependencies [b71cef1]
56
+ - Updated dependencies [274b2e5]
57
+ - Updated dependencies [b9e1c54]
58
+ - @modern-js/builder-shared@2.11.0
59
+ - @modern-js/utils@2.11.0
60
+
3
61
  ## 2.10.0
4
62
 
5
63
  ### Patch Changes
@@ -0,0 +1,2 @@
1
+ import type { DefaultBuilderPlugin } from '@modern-js/builder-shared';
2
+ export declare const builderAntdPlugin: () => DefaultBuilderPlugin;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.builderAntdPlugin = void 0;
4
+ const utils_1 = require("@modern-js/utils");
5
+ const builderAntdPlugin = () => ({
6
+ name: `builder-plugin-antd`,
7
+ setup(api) {
8
+ api.modifyBuilderConfig(builderConfig => {
9
+ var _a, _b, _c;
10
+ (_a = builderConfig.source) !== null && _a !== void 0 ? _a : (builderConfig.source = {});
11
+ if ((_b = builderConfig.source.transformImport) === null || _b === void 0 ? void 0 : _b.some(item => item.libraryName === 'antd')) {
12
+ return;
13
+ }
14
+ const antdMajorVersion = (0, utils_1.getAntdMajorVersion)(api.context.rootPath);
15
+ // antd >= v5 no longer need babel-plugin-import
16
+ // see: https://ant.design/docs/react/migration-v5#remove-babel-plugin-import
17
+ if (antdMajorVersion && antdMajorVersion < 5) {
18
+ (_c = builderConfig.source) !== null && _c !== void 0 ? _c : (builderConfig.source = {});
19
+ builderConfig.source.transformImport = [
20
+ ...(builderConfig.source.transformImport || []),
21
+ {
22
+ libraryName: 'antd',
23
+ libraryDirectory: useSSR(api.context.target) ? 'lib' : 'es',
24
+ style: true,
25
+ },
26
+ ];
27
+ }
28
+ });
29
+ },
30
+ });
31
+ exports.builderAntdPlugin = builderAntdPlugin;
32
+ function useSSR(target) {
33
+ return (Array.isArray(target) ? target : [target]).some(item => ['node', 'service-worker'].includes(item));
34
+ }
@@ -0,0 +1,2 @@
1
+ import { DefaultBuilderPlugin } from '@modern-js/builder-shared';
2
+ export declare function builderPluginAssetsRetry(): DefaultBuilderPlugin;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.builderPluginAssetsRetry = void 0;
27
+ const builder_shared_1 = require("@modern-js/builder-shared");
28
+ function builderPluginAssetsRetry() {
29
+ return {
30
+ name: 'builder-plugin-assets-retry',
31
+ setup(api) {
32
+ api.modifyBundlerChain(async (chain, { CHAIN_ID, target, HtmlPlugin }) => {
33
+ const config = api.getNormalizedConfig();
34
+ if (!config.output.assetsRetry || (0, builder_shared_1.isHtmlDisabled)(config, target)) {
35
+ return;
36
+ }
37
+ const { AssetsRetryPlugin } = await Promise.resolve().then(() => __importStar(require('@modern-js/builder-shared')));
38
+ chain.plugin(CHAIN_ID.PLUGIN.ASSETS_RETRY).use(AssetsRetryPlugin, [
39
+ {
40
+ ...(config.output.assetsRetry || {}),
41
+ HtmlPlugin,
42
+ },
43
+ ]);
44
+ });
45
+ },
46
+ };
47
+ }
48
+ exports.builderPluginAssetsRetry = builderPluginAssetsRetry;
@@ -57,7 +57,7 @@ async function printHeader(longestFileLength, longestLabelLength) {
57
57
  }
58
58
  return `${prev + curLabel} `;
59
59
  }, ' ');
60
- builder_shared_1.logger.log(chalk_1.default.bold(chalk_1.default.blue(headerRow)));
60
+ builder_shared_1.logger.log(chalk_1.default.bold.blue(headerRow));
61
61
  }
62
62
  async function printFileSizes(stats, distPath) {
63
63
  const { fs, filesize, gzipSize, stripAnsi } = await Promise.resolve().then(() => __importStar(require('@modern-js/utils')));
@@ -98,11 +98,15 @@ async function printFileSizes(stats, distPath) {
98
98
  const longestFileLength = Math.max(...assets.map(a => stripAnsi(a.folder + path_1.default.sep + a.name).length));
99
99
  builder_shared_1.logger.info(`File sizes after production build:\n`);
100
100
  printHeader(longestFileLength, longestLabelLength);
101
+ let totalSize = 0;
102
+ let totalGzipSize = 0;
101
103
  assets.forEach(asset => {
102
104
  let { sizeLabel } = asset;
103
105
  const { name, folder, gzipSizeLabel } = asset;
104
106
  const fileNameLength = stripAnsi(folder + path_1.default.sep + name).length;
105
107
  const sizeLength = stripAnsi(sizeLabel).length;
108
+ totalSize += asset.size;
109
+ totalGzipSize += asset.gzippedSize;
106
110
  if (sizeLength < longestLabelLength) {
107
111
  const rightPadding = ' '.repeat(longestLabelLength - sizeLength);
108
112
  sizeLabel += rightPadding;
@@ -114,7 +118,9 @@ async function printFileSizes(stats, distPath) {
114
118
  }
115
119
  builder_shared_1.logger.log(` ${fileNameLabel} ${sizeLabel} ${gzipSizeLabel}`);
116
120
  });
117
- builder_shared_1.logger.log('');
121
+ const totalSizeLabel = `${chalk_1.default.bold.blue('Total size:')} ${filesize(totalSize)}`;
122
+ const gzippedSizeLabel = `${chalk_1.default.bold.blue('Gzipped size:')} ${filesize(totalGzipSize)}`;
123
+ builder_shared_1.logger.log(`\n ${totalSizeLabel}\n ${gzippedSizeLabel}\n`);
118
124
  }
119
125
  const builderPluginFileSize = () => ({
120
126
  name: 'builder-plugin-file-size',
@@ -16,4 +16,6 @@ export declare const plugins: {
16
16
  font: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
17
17
  image: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
18
18
  media: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
19
+ assetsRetry: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
20
+ antd: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
19
21
  };
@@ -43,4 +43,6 @@ exports.plugins = {
43
43
  font: () => Promise.resolve().then(() => __importStar(require('./asset'))).then(m => m.builderAssetPlugin('font', builder_shared_1.FONT_EXTENSIONS)),
44
44
  image: () => Promise.resolve().then(() => __importStar(require('./asset'))).then(m => m.builderAssetPlugin('image', builder_shared_1.IMAGE_EXTENSIONS)),
45
45
  media: () => Promise.resolve().then(() => __importStar(require('./asset'))).then(m => m.builderAssetPlugin('media', builder_shared_1.MEDIA_EXTENSIONS)),
46
+ assetsRetry: () => Promise.resolve().then(() => __importStar(require('./assetsRetry'))).then(m => m.builderPluginAssetsRetry()),
47
+ antd: () => Promise.resolve().then(() => __importStar(require('./antd'))).then(m => m.builderAntdPlugin()),
46
48
  };
@@ -1,4 +1,4 @@
1
- import { DefaultBuilderPlugin } from '@modern-js/builder-shared';
1
+ import { type DefaultBuilderPlugin } from '@modern-js/builder-shared';
2
2
  /** Expect to match path just like "./node_modules/react-router/" */
3
3
  export declare const createDependenciesRegExp: (...dependencies: (string | RegExp)[]) => RegExp;
4
4
  export declare function builderPluginSplitChunks(): DefaultBuilderPlugin;
@@ -31,10 +31,12 @@ const assert_1 = __importDefault(require("assert"));
31
31
  const builder_shared_1 = require("@modern-js/builder-shared");
32
32
  function getUserDefinedCacheGroups(forceSplitting) {
33
33
  const cacheGroups = {};
34
- forceSplitting.forEach((reg, index) => {
35
- const key = `force-split-${index}`;
34
+ const pairs = Array.isArray(forceSplitting)
35
+ ? forceSplitting.map((regexp, index) => [`force-split-${index}`, regexp])
36
+ : Object.entries(forceSplitting);
37
+ pairs.forEach(([key, regexp]) => {
36
38
  cacheGroups[key] = {
37
- test: reg,
39
+ test: regexp,
38
40
  name: key,
39
41
  chunks: 'all',
40
42
  // Ignore minimum size, minimum chunks and maximum requests and always create chunks for user defined cache group.
@@ -57,7 +57,10 @@ const builderPluginSvg = () => {
57
57
  .type('javascript/auto')
58
58
  .use(CHAIN_ID.USE.SVGR)
59
59
  .loader(require.resolve('@svgr/webpack'))
60
- .options({ svgo: true })
60
+ .options({
61
+ svgo: true,
62
+ svgoConfig: (0, builder_shared_1.getSvgoDefaultConfig)(),
63
+ })
61
64
  .end()
62
65
  .when(defaultExport === 'url', c => c
63
66
  .use(CHAIN_ID.USE.URL)
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "engines": {
15
15
  "node": ">=14.0.0"
16
16
  },
17
- "version": "2.10.0",
17
+ "version": "2.12.0",
18
18
  "jsnext:source": "./src/index.ts",
19
19
  "types": "./dist/index.d.ts",
20
20
  "main": "./dist/index.js",
@@ -27,8 +27,8 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@svgr/webpack": "6.5.1",
30
- "@modern-js/builder-shared": "2.10.0",
31
- "@modern-js/utils": "2.10.0"
30
+ "@modern-js/builder-shared": "2.12.0",
31
+ "@modern-js/utils": "2.12.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@babel/core": "7.18.0",
@@ -36,7 +36,7 @@
36
36
  "@types/babel__preset-env": "^7.9.2",
37
37
  "@types/node": "^14",
38
38
  "typescript": "^4",
39
- "@scripts/vitest-config": "2.10.0"
39
+ "@scripts/vitest-config": "2.12.0"
40
40
  },
41
41
  "publishConfig": {
42
42
  "registry": "https://registry.npmjs.org/",