@rsbuild/core 0.0.19 → 0.0.21

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.
Files changed (51) hide show
  1. package/dist/cli/commands.js +2 -2
  2. package/dist/cli/config.js +19 -2
  3. package/dist/cli/index.d.ts +1 -5
  4. package/dist/cli/index.js +3 -21
  5. package/dist/cli/run.d.ts +7 -0
  6. package/dist/{server/constants.js → cli/run.js} +27 -27
  7. package/dist/plugins/asset.d.ts +1 -1
  8. package/dist/plugins/asset.js +19 -13
  9. package/dist/plugins/cache.js +8 -8
  10. package/dist/plugins/cleanOutput.js +3 -3
  11. package/dist/plugins/fileSize.js +24 -24
  12. package/dist/plugins/html.js +6 -24
  13. package/dist/plugins/index.d.ts +1 -1
  14. package/dist/plugins/index.js +1 -5
  15. package/dist/plugins/inlineChunk.js +2 -7
  16. package/dist/plugins/rem.js +2 -2
  17. package/dist/plugins/splitChunks.js +0 -5
  18. package/dist/plugins/startUrl.js +4 -2
  19. package/dist/rspack-provider/core/initHooks.d.ts +4 -3
  20. package/dist/rspack-provider/core/initPlugins.js +5 -1
  21. package/dist/rspack-provider/index.d.ts +1 -1
  22. package/dist/rspack-provider/plugins/rspack-profile.js +6 -6
  23. package/dist/rspack-provider/plugins/swc.js +1 -2
  24. package/dist/rspack-provider/provider.js +2 -2
  25. package/dist/rspack-provider/rspackLoader/css-modules-typescript-pre-loader/postcss-icss-extract-plugin.d.ts +1 -1
  26. package/dist/rspack-provider/rspackLoader/css-modules-typescript-pre-loader/postcss-icss-extract-plugin.js +4 -4
  27. package/dist/rspack-provider/shared/fs.js +2 -2
  28. package/dist/rspack-provider/shared/plugin.js +1 -4
  29. package/dist/rspack-provider/types/index.d.ts +0 -1
  30. package/dist/rspack-provider/types/index.js +0 -2
  31. package/dist/rspack-provider/types/plugin.d.ts +1 -4
  32. package/dist/server/dev-middleware/hmr-client/createSocketUrl.d.ts +1 -1
  33. package/dist/server/dev-middleware/hmr-client/createSocketUrl.js +1 -1
  34. package/dist/server/dev-middleware/hmr-client/index.js +2 -25
  35. package/dist/server/dev-middleware/index.d.ts +2 -2
  36. package/dist/server/dev-middleware/index.js +1 -1
  37. package/dist/server/dev-middleware/socketServer.d.ts +2 -2
  38. package/dist/server/dev-middleware/socketServer.js +1 -4
  39. package/dist/server/devServer.d.ts +1 -2
  40. package/dist/server/devServer.js +28 -14
  41. package/dist/server/middlewares.d.ts +7 -1
  42. package/dist/server/middlewares.js +70 -2
  43. package/dist/server/prodServer.d.ts +4 -2
  44. package/dist/server/prodServer.js +12 -2
  45. package/dist/server/restart.d.ts +11 -0
  46. package/dist/server/restart.js +64 -0
  47. package/package.json +3 -29
  48. package/types.d.ts +63 -23
  49. package/dist/rspack-provider/types/hooks.d.ts +0 -3
  50. package/dist/rspack-provider/types/hooks.js +0 -16
  51. package/dist/server/constants.d.ts +0 -6
@@ -22,11 +22,11 @@ __export(commands_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(commands_exports);
24
24
  var import_path = require("path");
25
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
25
+ var import_shared = require("@rsbuild/shared");
26
26
  var import_commander = require("commander");
27
27
  function setupProgram(rsbuild) {
28
28
  const pkgJson = (0, import_path.join)(__dirname, "../../package.json");
29
- const { version } = import_fs_extra.fs.readJSONSync(pkgJson);
29
+ const { version } = import_shared.fse.readJSONSync(pkgJson);
30
30
  import_commander.program.name("rsbuild").usage("<command> [options]").version(version);
31
31
  import_commander.program.command("dev").option(`--open`, "open the page in browser on startup").description("starting the dev server").action(async (options) => {
32
32
  await rsbuild.startDevServer({
@@ -33,10 +33,11 @@ __export(config_exports, {
33
33
  loadConfig: () => loadConfig
34
34
  });
35
35
  module.exports = __toCommonJS(config_exports);
36
+ var import_fs = __toESM(require("fs"));
36
37
  var import_jiti = __toESM(require("jiti"));
37
38
  var import_path = require("path");
38
39
  var import_shared = require("@rsbuild/shared");
39
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
40
+ var import_restart = require("../server/restart");
40
41
  const defineConfig = (config) => config;
41
42
  const resolveConfigPath = () => {
42
43
  const CONFIG_FILES = [
@@ -50,19 +51,35 @@ const resolveConfigPath = () => {
50
51
  const root = process.cwd();
51
52
  for (const file of CONFIG_FILES) {
52
53
  const configFile = (0, import_path.join)(root, file);
53
- if (import_fs_extra.fs.existsSync(configFile)) {
54
+ if (import_fs.default.existsSync(configFile)) {
54
55
  return configFile;
55
56
  }
56
57
  }
57
58
  return null;
58
59
  };
60
+ async function watchConfig(configFile) {
61
+ const chokidar = await Promise.resolve().then(() => __toESM(require("@rsbuild/shared/chokidar")));
62
+ const watcher = chokidar.watch(configFile, {});
63
+ const callback = async () => {
64
+ watcher.close();
65
+ await (0, import_restart.restartDevServer)({ filePath: configFile });
66
+ };
67
+ watcher.on("change", callback);
68
+ watcher.on("unlink", callback);
69
+ }
59
70
  async function loadConfig() {
60
71
  const configFile = resolveConfigPath();
61
72
  if (configFile) {
62
73
  const loadConfig2 = (0, import_jiti.default)(__filename, {
63
74
  esmResolve: true,
75
+ // disable require cache to support restart CLI and read the new config
76
+ requireCache: false,
64
77
  interopDefault: true
65
78
  });
79
+ const command = process.argv[2];
80
+ if (command === "dev") {
81
+ watchConfig(configFile);
82
+ }
66
83
  return loadConfig2(configFile);
67
84
  }
68
85
  return {};
@@ -1,6 +1,2 @@
1
- import { RsbuildPlugin } from '..';
2
1
  export { defineConfig } from './config';
3
- type RunCliOptions = {
4
- defaultPlugins?: RsbuildPlugin[];
5
- };
6
- export declare function runCli(options?: RunCliOptions): Promise<void>;
2
+ export { runCli } from './run';
package/dist/cli/index.js CHANGED
@@ -18,30 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var cli_exports = {};
20
20
  __export(cli_exports, {
21
- defineConfig: () => import_config2.defineConfig,
22
- runCli: () => runCli
21
+ defineConfig: () => import_config.defineConfig,
22
+ runCli: () => import_run.runCli
23
23
  });
24
24
  module.exports = __toCommonJS(cli_exports);
25
- var import__ = require("..");
26
- var import_commands = require("./commands");
27
25
  var import_config = require("./config");
28
- var import_config2 = require("./config");
29
- async function runCli(options = {}) {
30
- var _a;
31
- const config = await (0, import_config.loadConfig)();
32
- const rsbuild = await (0, import__.createRsbuild)({
33
- rsbuildConfig: config,
34
- entry: ((_a = config.source) == null ? void 0 : _a.entries) || (0, import_config.getDefaultEntries)(),
35
- provider: config.provider
36
- });
37
- if (options.defaultPlugins) {
38
- rsbuild.addPlugins(options.defaultPlugins);
39
- }
40
- if (config.plugins) {
41
- rsbuild.addPlugins(config.plugins);
42
- }
43
- (0, import_commands.setupProgram)(rsbuild);
44
- }
26
+ var import_run = require("./run");
45
27
  // Annotate the CommonJS export names for ESM import in node:
46
28
  0 && (module.exports = {
47
29
  defineConfig,
@@ -0,0 +1,7 @@
1
+ import { RsbuildPlugin } from '..';
2
+ type RunCliOptions = {
3
+ isRestart?: boolean;
4
+ defaultPlugins?: RsbuildPlugin[];
5
+ };
6
+ export declare function runCli(options?: RunCliOptions): Promise<import("..").RsbuildInstance<any>>;
7
+ export {};
@@ -16,34 +16,34 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var constants_exports = {};
20
- __export(constants_exports, {
21
- HMR_SOCK_PATH: () => HMR_SOCK_PATH,
22
- getDefaultDevOptions: () => getDefaultDevOptions
19
+ var run_exports = {};
20
+ __export(run_exports, {
21
+ runCli: () => runCli
23
22
  });
24
- module.exports = __toCommonJS(constants_exports);
25
- const HMR_SOCK_PATH = "/webpack-hmr";
26
- const getDefaultDevOptions = () => {
27
- return {
28
- client: {
29
- path: HMR_SOCK_PATH,
30
- // By default it is set to the port number of the dev server
31
- port: "",
32
- // By default it is set to "location.hostname"
33
- host: "",
34
- // By default it is set to "location.protocol === 'https:' ? 'wss' : 'ws'""
35
- protocol: ""
36
- },
37
- https: false,
38
- devMiddleware: { writeToDisk: true },
39
- watch: true,
40
- hot: true,
41
- compress: true,
42
- liveReload: true
43
- };
44
- };
23
+ module.exports = __toCommonJS(run_exports);
24
+ var import__ = require("..");
25
+ var import_commands = require("./commands");
26
+ var import_config = require("./config");
27
+ async function runCli(options = {}) {
28
+ var _a;
29
+ const config = await (0, import_config.loadConfig)();
30
+ const rsbuild = await (0, import__.createRsbuild)({
31
+ rsbuildConfig: config,
32
+ entry: ((_a = config.source) == null ? void 0 : _a.entries) || (0, import_config.getDefaultEntries)(),
33
+ provider: config.provider
34
+ });
35
+ if (options.defaultPlugins) {
36
+ rsbuild.addPlugins(options.defaultPlugins);
37
+ }
38
+ if (config.plugins) {
39
+ rsbuild.addPlugins(config.plugins);
40
+ }
41
+ if (!options.isRestart) {
42
+ (0, import_commands.setupProgram)(rsbuild);
43
+ }
44
+ return rsbuild;
45
+ }
45
46
  // Annotate the CommonJS export names for ESM import in node:
46
47
  0 && (module.exports = {
47
- HMR_SOCK_PATH,
48
- getDefaultDevOptions
48
+ runCli
49
49
  });
@@ -1,3 +1,3 @@
1
1
  import type { DefaultRsbuildPlugin } from '@rsbuild/shared';
2
2
  export declare function getRegExpForExts(exts: string[]): RegExp;
3
- export declare const pluginAsset: (assetType: 'image' | 'media' | 'font' | 'svg', exts: string[]) => DefaultRsbuildPlugin;
3
+ export declare const pluginAsset: () => DefaultRsbuildPlugin;
@@ -41,22 +41,28 @@ function getRegExpForExts(exts) {
41
41
  "i"
42
42
  );
43
43
  }
44
- const pluginAsset = (assetType, exts) => ({
45
- name: `plugin-${assetType}`,
44
+ const pluginAsset = () => ({
45
+ name: "plugin-asset",
46
46
  setup(api) {
47
47
  api.modifyBundlerChain((chain, { isProd }) => {
48
48
  const config = api.getNormalizedConfig();
49
- const regExp = getRegExpForExts(exts);
50
- const distDir = (0, import_shared.getDistPath)(config.output, assetType);
51
- const filename = (0, import_shared.getFilename)(config.output, assetType, isProd);
52
- const maxSize = config.output.dataUriLimit[assetType];
53
- const rule = chain.module.rule(assetType).test(regExp);
54
- (0, import_shared.chainStaticAssetRule)({
55
- rule,
56
- maxSize,
57
- filename: import_path.default.posix.join(distDir, filename),
58
- assetType
59
- });
49
+ const createAssetRule = (assetType, exts) => {
50
+ const regExp = getRegExpForExts(exts);
51
+ const distDir = (0, import_shared.getDistPath)(config.output, assetType);
52
+ const filename = (0, import_shared.getFilename)(config.output, assetType, isProd);
53
+ const maxSize = config.output.dataUriLimit[assetType];
54
+ const rule = chain.module.rule(assetType).test(regExp);
55
+ (0, import_shared.chainStaticAssetRule)({
56
+ rule,
57
+ maxSize,
58
+ filename: import_path.default.posix.join(distDir, filename),
59
+ assetType
60
+ });
61
+ };
62
+ createAssetRule("image", import_shared.IMAGE_EXTENSIONS);
63
+ createAssetRule("svg", ["svg"]);
64
+ createAssetRule("media", import_shared.MEDIA_EXTENSIONS);
65
+ createAssetRule("font", import_shared.FONT_EXTENSIONS);
60
66
  });
61
67
  }
62
68
  });
@@ -33,18 +33,18 @@ __export(cache_exports, {
33
33
  module.exports = __toCommonJS(cache_exports);
34
34
  var import_crypto = __toESM(require("crypto"));
35
35
  var import_path = require("path");
36
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
37
36
  var import_shared = require("@rsbuild/shared");
37
+ var import_shared2 = require("@rsbuild/shared");
38
38
  async function validateCache(cacheDirectory, buildDependencies) {
39
39
  const configFile = (0, import_path.join)(cacheDirectory, "buildDependencies.json");
40
- if (await (0, import_shared.isFileExists)(configFile)) {
41
- const prevBuildDependencies = await import_fs_extra.fs.readJSON(configFile);
40
+ if (await (0, import_shared2.isFileExists)(configFile)) {
41
+ const prevBuildDependencies = await import_shared.fse.readJSON(configFile);
42
42
  if (JSON.stringify(prevBuildDependencies) === JSON.stringify(buildDependencies)) {
43
43
  return;
44
44
  }
45
- await import_fs_extra.fs.remove(cacheDirectory);
45
+ await import_shared.fse.remove(cacheDirectory);
46
46
  }
47
- await import_fs_extra.fs.outputJSON(configFile, buildDependencies);
47
+ await import_shared.fse.outputJSON(configFile, buildDependencies);
48
48
  }
49
49
  function getDigestHash(digest) {
50
50
  const fsHash = import_crypto.default.createHash("md5");
@@ -61,7 +61,7 @@ async function getBuildDependencies(context) {
61
61
  const rootPackageJson = (0, import_path.join)(context.rootPath, "package.json");
62
62
  const browserslistConfig = (0, import_path.join)(context.rootPath, ".browserslistrc");
63
63
  const buildDependencies = {};
64
- if (await (0, import_shared.isFileExists)(rootPackageJson)) {
64
+ if (await (0, import_shared2.isFileExists)(rootPackageJson)) {
65
65
  buildDependencies.packageJson = [rootPackageJson];
66
66
  }
67
67
  if (context.configPath) {
@@ -70,14 +70,14 @@ async function getBuildDependencies(context) {
70
70
  if (context.tsconfigPath) {
71
71
  buildDependencies.tsconfig = [context.tsconfigPath];
72
72
  }
73
- if (await (0, import_shared.isFileExists)(browserslistConfig)) {
73
+ if (await (0, import_shared2.isFileExists)(browserslistConfig)) {
74
74
  buildDependencies.browserslistrc = [browserslistConfig];
75
75
  }
76
76
  const tailwindExts = ["ts", "js", "cjs", "mjs"];
77
77
  const configs = tailwindExts.map(
78
78
  (ext) => (0, import_path.join)(context.rootPath, `tailwind.config.${ext}`)
79
79
  );
80
- const tailwindConfig = (0, import_shared.findExists)(configs);
80
+ const tailwindConfig = (0, import_shared2.findExists)(configs);
81
81
  if (tailwindConfig) {
82
82
  buildDependencies.tailwindcss = [tailwindConfig];
83
83
  }
@@ -21,10 +21,10 @@ __export(cleanOutput_exports, {
21
21
  pluginCleanOutput: () => pluginCleanOutput
22
22
  });
23
23
  module.exports = __toCommonJS(cleanOutput_exports);
24
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
24
+ var import_shared = require("@rsbuild/shared");
25
25
  const emptyDir = async (dir) => {
26
- if (await import_fs_extra.fs.pathExists(dir)) {
27
- await import_fs_extra.fs.emptyDir(dir);
26
+ if (await import_shared.fse.pathExists(dir)) {
27
+ await import_shared.fse.emptyDir(dir);
28
28
  }
29
29
  };
30
30
  const pluginCleanOutput = () => ({
@@ -33,19 +33,18 @@ __export(fileSize_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(fileSize_exports);
35
35
  var import_path = __toESM(require("path"));
36
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
37
36
  var import_shared = require("@rsbuild/shared");
38
- var import_filesize = __toESM(require("filesize"));
37
+ var import_shared2 = require("@rsbuild/shared");
39
38
  var import_gzip_size = __toESM(require("gzip-size"));
40
39
  const filterAsset = (asset) => !/\.map$/.test(asset) && !/\.LICENSE\.txt$/.test(asset);
41
40
  const getAssetColor = (size) => {
42
41
  if (size > 300 * 1e3) {
43
- return import_shared.color.red;
42
+ return import_shared2.color.red;
44
43
  }
45
44
  if (size > 100 * 1e3) {
46
- return import_shared.color.yellow;
45
+ return import_shared2.color.yellow;
47
46
  }
48
- return import_shared.color.green;
47
+ return import_shared2.color.green;
49
48
  };
50
49
  async function printHeader(longestFileLength, longestLabelLength) {
51
50
  const longestLengths = [longestFileLength, longestLabelLength];
@@ -57,11 +56,15 @@ async function printHeader(longestFileLength, longestLabelLength) {
57
56
  }
58
57
  return `${prev + curLabel} `;
59
58
  }, " ");
60
- import_shared.logger.log(import_shared.color.bold(import_shared.color.blue(headerRow)));
59
+ import_shared2.logger.log(import_shared2.color.bold(import_shared2.color.blue(headerRow)));
61
60
  }
61
+ const calcFileSize = (len) => {
62
+ const val = len / 1e3;
63
+ return `${val.toFixed(val < 1 ? 2 : 1)} kB`;
64
+ };
62
65
  async function printFileSizes(stats, distPath) {
63
66
  const formatAsset = (asset) => {
64
- const contents = import_fs_extra.fs.readFileSync(import_path.default.join(distPath, asset.name));
67
+ const contents = import_shared.fse.readFileSync(import_path.default.join(distPath, asset.name));
65
68
  const size = contents.length;
66
69
  const gzippedSize = import_gzip_size.default.sync(contents);
67
70
  return {
@@ -69,10 +72,8 @@ async function printFileSizes(stats, distPath) {
69
72
  folder: import_path.default.join(import_path.default.basename(distPath), import_path.default.dirname(asset.name)),
70
73
  name: import_path.default.basename(asset.name),
71
74
  gzippedSize,
72
- sizeLabel: (0, import_filesize.default)(size, { round: 1 }),
73
- gzipSizeLabel: getAssetColor(gzippedSize)(
74
- (0, import_filesize.default)(gzippedSize, { round: 1 })
75
- )
75
+ sizeLabel: calcFileSize(size),
76
+ gzipSizeLabel: getAssetColor(gzippedSize)(calcFileSize(gzippedSize))
76
77
  };
77
78
  };
78
79
  const multiStats = "stats" in stats ? stats.stats : [stats];
@@ -100,7 +101,7 @@ async function printFileSizes(stats, distPath) {
100
101
  const longestFileLength = Math.max(
101
102
  ...assets.map((a) => (a.folder + import_path.default.sep + a.name).length)
102
103
  );
103
- import_shared.logger.info(`Production file sizes:
104
+ import_shared2.logger.info(`Production file sizes:
104
105
  `);
105
106
  printHeader(longestFileLength, longestLabelLength);
106
107
  let totalSize = 0;
@@ -116,21 +117,20 @@ async function printFileSizes(stats, distPath) {
116
117
  const rightPadding = " ".repeat(longestLabelLength - sizeLength);
117
118
  sizeLabel += rightPadding;
118
119
  }
119
- let fileNameLabel = import_shared.color.dim(asset.folder + import_path.default.sep) + import_shared.color.cyan(asset.name);
120
+ let fileNameLabel = import_shared2.color.dim(asset.folder + import_path.default.sep) + import_shared2.color.cyan(asset.name);
120
121
  if (fileNameLength < longestFileLength) {
121
122
  const rightPadding = " ".repeat(longestFileLength - fileNameLength);
122
123
  fileNameLabel += rightPadding;
123
124
  }
124
- import_shared.logger.log(` ${fileNameLabel} ${sizeLabel} ${gzipSizeLabel}`);
125
+ import_shared2.logger.log(` ${fileNameLabel} ${sizeLabel} ${gzipSizeLabel}`);
125
126
  });
126
- const totalSizeLabel = `${import_shared.color.bold(import_shared.color.blue("Total size:"))} ${(0, import_filesize.default)(
127
- totalSize,
128
- { round: 1 }
129
- )}`;
130
- const gzippedSizeLabel = `${import_shared.color.bold(
131
- import_shared.color.blue("Gzipped size:")
132
- )} ${(0, import_filesize.default)(totalGzipSize, { round: 1 })}`;
133
- import_shared.logger.log(`
127
+ const totalSizeLabel = `${import_shared2.color.bold(
128
+ import_shared2.color.blue("Total size:")
129
+ )} ${calcFileSize(totalSize)}`;
130
+ const gzippedSizeLabel = `${import_shared2.color.bold(
131
+ import_shared2.color.blue("Gzipped size:")
132
+ )} ${calcFileSize(totalGzipSize)}`;
133
+ import_shared2.logger.log(`
134
134
  ${totalSizeLabel}
135
135
  ${gzippedSizeLabel}
136
136
  `);
@@ -144,8 +144,8 @@ const pluginFileSize = () => ({
144
144
  try {
145
145
  await printFileSizes(stats, api.context.distPath);
146
146
  } catch (err) {
147
- import_shared.logger.error("Failed to print file size.");
148
- import_shared.logger.error(err);
147
+ import_shared2.logger.error("Failed to print file size.");
148
+ import_shared2.logger.error(err);
149
149
  }
150
150
  }
151
151
  });
@@ -40,8 +40,6 @@ __export(html_exports, {
40
40
  module.exports = __toCommonJS(html_exports);
41
41
  var import_path = __toESM(require("path"));
42
42
  var import_shared = require("@rsbuild/shared");
43
- var import_fs_extra = require("@rsbuild/shared/fs-extra");
44
- var import_lodash = __toESM(require("lodash"));
45
43
  var import_HtmlBasicPlugin = require("../rspack-plugins/HtmlBasicPlugin");
46
44
  function getTitle(entryName, config) {
47
45
  return (0, import_shared.mergeChainedOptions)({
@@ -133,11 +131,13 @@ const applyInjectTags = (api) => {
133
131
  api.modifyBundlerChain(async (chain, { HtmlPlugin, CHAIN_ID }) => {
134
132
  const config = api.getNormalizedConfig();
135
133
  const tags = (0, import_shared.castArray)(config.html.tags).filter(Boolean);
136
- const tagsByEntries = import_lodash.default.mapValues(
137
- config.html.tagsByEntries,
138
- (tags2) => (0, import_shared.castArray)(tags2).filter(Boolean)
134
+ const tagsByEntries = config.html.tagsByEntries || {};
135
+ Object.keys(tagsByEntries).forEach(
136
+ (key) => tagsByEntries[key] = (0, import_shared.castArray)(tagsByEntries[key]).filter(Boolean)
137
+ );
138
+ const shouldByEntries = Object.values(tagsByEntries).some(
139
+ (entry) => Array.isArray(entry) && entry.length > 0
139
140
  );
140
- const shouldByEntries = import_lodash.default.some(tagsByEntries, "length");
141
141
  if (!tags.length && !shouldByEntries) {
142
142
  return;
143
143
  }
@@ -163,7 +163,6 @@ const applyInjectTags = (api) => {
163
163
  const pluginHtml = () => ({
164
164
  name: "plugin-html",
165
165
  setup(api) {
166
- const routesInfo = [];
167
166
  api.modifyBundlerChain(
168
167
  async (chain, { HtmlPlugin, isProd, CHAIN_ID, target }) => {
169
168
  const config = api.getNormalizedConfig();
@@ -225,12 +224,6 @@ const pluginHtml = () => ({
225
224
  entryValue
226
225
  }
227
226
  });
228
- routesInfo.push({
229
- urlPath: index === 0 ? "/" : `/${entryName}`,
230
- entryName,
231
- entryPath: filename,
232
- isSPA: true
233
- });
234
227
  chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).use(HtmlPlugin, [finalOptions]);
235
228
  })
236
229
  );
@@ -261,17 +254,6 @@ const pluginHtml = () => ({
261
254
  }
262
255
  }
263
256
  );
264
- const emitRouteJson = async () => {
265
- const routeFilePath = import_path.default.join(api.context.distPath, import_shared.ROUTE_SPEC_FILE);
266
- if (!await (0, import_shared.isFileExists)(routeFilePath) && routesInfo.length) {
267
- await import_fs_extra.fs.outputFile(
268
- routeFilePath,
269
- JSON.stringify({ routes: routesInfo }, null, 2)
270
- );
271
- }
272
- };
273
- api.onBeforeBuild(emitRouteJson);
274
- api.onBeforeStartDevServer(emitRouteJson);
275
257
  applyInjectTags(api);
276
258
  }
277
259
  });
@@ -1,2 +1,2 @@
1
- import { Plugins } from '@rsbuild/shared';
1
+ import type { Plugins } from '@rsbuild/shared';
2
2
  export declare const plugins: Plugins;
@@ -31,7 +31,6 @@ __export(plugins_exports, {
31
31
  plugins: () => plugins
32
32
  });
33
33
  module.exports = __toCommonJS(plugins_exports);
34
- var import_shared = require("@rsbuild/shared");
35
34
  const plugins = {
36
35
  html: () => Promise.resolve().then(() => __toESM(require("./html"))).then((m) => m.pluginHtml()),
37
36
  cleanOutput: () => Promise.resolve().then(() => __toESM(require("./cleanOutput"))).then((m) => m.pluginCleanOutput()),
@@ -46,10 +45,7 @@ const plugins = {
46
45
  splitChunks: () => Promise.resolve().then(() => __toESM(require("./splitChunks"))).then((m) => m.pluginSplitChunks()),
47
46
  inlineChunk: () => Promise.resolve().then(() => __toESM(require("./inlineChunk"))).then((m) => m.pluginInlineChunk()),
48
47
  bundleAnalyzer: () => Promise.resolve().then(() => __toESM(require("./bundleAnalyzer"))).then((m) => m.pluginBundleAnalyzer()),
49
- svg: () => Promise.resolve().then(() => __toESM(require("./asset"))).then((m) => m.pluginAsset("svg", ["svg"])),
50
- font: () => Promise.resolve().then(() => __toESM(require("./asset"))).then((m) => m.pluginAsset("font", import_shared.FONT_EXTENSIONS)),
51
- image: () => Promise.resolve().then(() => __toESM(require("./asset"))).then((m) => m.pluginAsset("image", import_shared.IMAGE_EXTENSIONS)),
52
- media: () => Promise.resolve().then(() => __toESM(require("./asset"))).then((m) => m.pluginAsset("media", import_shared.MEDIA_EXTENSIONS)),
48
+ asset: () => Promise.resolve().then(() => __toESM(require("./asset"))).then((m) => m.pluginAsset()),
53
49
  rem: () => Promise.resolve().then(() => __toESM(require("./rem"))).then((m) => m.pluginRem()),
54
50
  wasm: () => Promise.resolve().then(() => __toESM(require("./wasm"))).then((m) => m.pluginWasm()),
55
51
  moment: () => Promise.resolve().then(() => __toESM(require("./moment"))).then((m) => m.pluginMoment()),
@@ -43,7 +43,6 @@ const pluginInlineChunk = () => ({
43
43
  }
44
44
  const { InlineChunkHtmlPlugin } = await Promise.resolve().then(() => __toESM(require("@rsbuild/shared")));
45
45
  const {
46
- disableInlineRuntimeChunk,
47
46
  enableInlineStyles,
48
47
  // todo: not support enableInlineScripts in Rspack yet, which will take unknown build error
49
48
  enableInlineScripts
@@ -60,12 +59,8 @@ const pluginInlineChunk = () => ({
60
59
  enableInlineStyles === true ? import_shared.CSS_REGEX : enableInlineStyles
61
60
  );
62
61
  }
63
- if (!disableInlineRuntimeChunk) {
64
- scriptTests.push(
65
- // RegExp like /bundler-runtime([.].+)?\.js$/
66
- // matches bundler-runtime.js and bundler-runtime.123456.js
67
- new RegExp(`${import_shared.RUNTIME_CHUNK_NAME}([.].+)?\\.js$`)
68
- );
62
+ if (!scriptTests.length && !styleTests.length) {
63
+ return;
69
64
  }
70
65
  chain.plugin(CHAIN_ID.PLUGIN.INLINE_HTML).use(InlineChunkHtmlPlugin, [
71
66
  HtmlPlugin,
@@ -31,8 +31,8 @@ __export(rem_exports, {
31
31
  pluginRem: () => pluginRem
32
32
  });
33
33
  module.exports = __toCommonJS(rem_exports);
34
- var import_lodash = __toESM(require("lodash"));
35
34
  var import_shared = require("@rsbuild/shared");
35
+ var import_shared2 = require("@rsbuild/shared");
36
36
  const defaultOptions = {
37
37
  enableRuntime: true,
38
38
  rootFontSize: 50
@@ -65,7 +65,7 @@ const pluginRem = () => ({
65
65
  rootValue: userOptions.rootFontSize,
66
66
  unitPrecision: 5,
67
67
  propList: ["*"],
68
- ...import_lodash.default.cloneDeep(userOptions.pxtorem || {})
68
+ ...userOptions.pxtorem ? (0, import_shared2.cloneDeep)(userOptions.pxtorem) : {}
69
69
  });
70
70
  applyRules.forEach((name) => {
71
71
  chain.module.rules.has(name) && chain.module.rule(name).use(CHAIN_ID.USE.POSTCSS).tap((options = {}) => {
@@ -226,11 +226,6 @@ function pluginSplitChunks() {
226
226
  polyfill: config.output.polyfill
227
227
  });
228
228
  chain.optimization.splitChunks(splitChunksOptions);
229
- if (chunkSplit.strategy !== "all-in-one") {
230
- chain.optimization.runtimeChunk({
231
- name: import_shared.RUNTIME_CHUNK_NAME
232
- });
233
- }
234
229
  }
235
230
  );
236
231
  }
@@ -96,7 +96,7 @@ function pluginStartUrl() {
96
96
  name: "plugin-start-url",
97
97
  setup(api) {
98
98
  api.onAfterStartDevServer(async (params) => {
99
- const { port } = params;
99
+ const { port, routes } = params;
100
100
  const config = api.getNormalizedConfig();
101
101
  const { startUrl, beforeStartUrl } = config.dev;
102
102
  const { open, https } = api.context.devServer || {};
@@ -107,7 +107,9 @@ function pluginStartUrl() {
107
107
  const urls = [];
108
108
  if (startUrl === true || !startUrl) {
109
109
  const protocol = https ? "https" : "http";
110
- urls.push(`${protocol}://localhost:${port}`);
110
+ urls.push(
111
+ (0, import_shared.normalizeUrl)(`${protocol}://localhost:${port}/${routes[0].route}`)
112
+ );
111
113
  } else {
112
114
  urls.push(
113
115
  ...(0, import_shared.castArray)(startUrl).map(
@@ -1,5 +1,6 @@
1
- import { OnExitFn, OnAfterBuildFn, OnBeforeBuildFn, OnDevCompileDoneFn, ModifyRsbuildConfigFn, OnAfterStartDevServerFn, OnBeforeStartDevServerFn, OnAfterCreateCompilerFn, OnBeforeCreateCompilerFn, ModifyBundlerChainFn, type RspackConfig } from '@rsbuild/shared';
2
- import type { RsbuildConfig, ModifyRspackConfigFn } from '../types';
1
+ import { OnExitFn, OnAfterBuildFn, OnBeforeBuildFn, OnDevCompileDoneFn, ModifyRsbuildConfigFn, OnAfterStartDevServerFn, OnBeforeStartDevServerFn, OnAfterCreateCompilerFn, OnBeforeCreateCompilerFn, ModifyBundlerChainFn, type RspackConfig, type ModifyRspackConfigFn } from '@rsbuild/shared';
2
+ import type { RsbuildConfig } from '../types';
3
+ import type { Compiler, MultiCompiler } from '@rspack/core';
3
4
  export declare function initHooks(): {
4
5
  /** parameters are not bundler-related */
5
6
  onExitHook: import("@rsbuild/shared").AsyncHook<OnExitFn>;
@@ -11,7 +12,7 @@ export declare function initHooks(): {
11
12
  onBeforeBuildHook: import("@rsbuild/shared").AsyncHook<OnBeforeBuildFn<RspackConfig>>;
12
13
  modifyRspackConfigHook: import("@rsbuild/shared").AsyncHook<ModifyRspackConfigFn>;
13
14
  modifyRsbuildConfigHook: import("@rsbuild/shared").AsyncHook<ModifyRsbuildConfigFn<RsbuildConfig>>;
14
- onAfterCreateCompilerHook: import("@rsbuild/shared").AsyncHook<OnAfterCreateCompilerFn<import("@rspack/core/dist/Compiler").Compiler | import("@rspack/core").MultiCompiler>>;
15
+ onAfterCreateCompilerHook: import("@rsbuild/shared").AsyncHook<OnAfterCreateCompilerFn<Compiler | MultiCompiler>>;
15
16
  onBeforeCreateCompilerHook: import("@rsbuild/shared").AsyncHook<OnBeforeCreateCompilerFn<RspackConfig>>;
16
17
  modifyBundlerChainHook: import("@rsbuild/shared").AsyncHook<ModifyBundlerChainFn>;
17
18
  };
@@ -73,7 +73,11 @@ function getPluginAPI({
73
73
  onAfterCreateCompiler: hooks.onAfterCreateCompilerHook.tap,
74
74
  onBeforeCreateCompiler: hooks.onBeforeCreateCompilerHook.tap,
75
75
  onAfterStartDevServer: hooks.onAfterStartDevServerHook.tap,
76
- onBeforeStartDevServer: hooks.onBeforeStartDevServerHook.tap
76
+ onBeforeStartDevServer: hooks.onBeforeStartDevServerHook.tap,
77
+ modifyWebpackChain: () => {
78
+ },
79
+ modifyWebpackConfig: () => {
80
+ }
77
81
  };
78
82
  }
79
83
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,5 +1,5 @@
1
1
  export { getRspackVersion } from './shared/rspackVersion';
2
2
  export { rspackProvider } from './provider';
3
3
  export type { RspackProvider } from './provider';
4
- export type { RsbuildConfig, NormalizedConfig, ModifyRspackConfigFn, RsbuildPluginAPI } from './types';
4
+ export type { RsbuildConfig, NormalizedConfig, RsbuildPluginAPI } from './types';
5
5
  export type { Rspack, RspackConfig } from '@rsbuild/shared';