From cafea34df22db249ed2a870d0cafd6fdbf25b79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 3 Nov 2025 16:43:36 +0100 Subject: [PATCH 1/4] add docs for customizing Rspack dev server configuration --- .../rspack-bundler-integration.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md b/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md index 94566121a4..38d262bd6b 100644 --- a/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md +++ b/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md @@ -671,6 +671,19 @@ new GenerateSW({ }) ``` +### Dev Server + +You can customize the Rspack dev server much like you would when using meteor run. Any [devServer option listed in the official Rspack guide](https://rspack.rs/config/dev-server) can be applied in your app’s [`rspack.config.js`](./rspack-bundler-integration.md#custom-rspackconfigjs). + +The only exception is the port configuration. To set a specific port for the Rspack dev server, use the `RSPACK_DEVSERVER_PORT` environment variable: + +```bash +# Assign a specific port for the Rspack dev server +RSPACK_DEVSERVER_PORT=3232 meteor run +``` + +The reason is that the Rspack dev server is handled by the Meteor so it can make both dev server works together, and the info of the port needs to be properly shared via the env. + ## Benefits Meteor–Rspack integration sends your app code to Rspack to use modern bundler features. Meteor then uses Rspack’s output to handle Meteor-specific tasks (like Atmosphere package compilation) and create the final bundle. From 5e5963fd5ae75d07837823c92299e0f9b5b918d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 3 Nov 2025 16:53:17 +0100 Subject: [PATCH 2/4] improve docs with thread-stream error handling example --- .../rspack-bundler-integration.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md b/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md index 38d262bd6b..4c7785b830 100644 --- a/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md +++ b/v3-docs/docs/about/modern-build-stack/rspack-bundler-integration.md @@ -552,6 +552,30 @@ module.exports = defineConfig(Meteor => ({ })); ``` +--- + +A reported use case for this is with the `thread-stream` dependency, a transitive dependency of Mongo packages. If you get this error: + +``` shell +Error: Cannot find module '/_build/main-dev/lib/worker.js' +``` + +It means the worker can’t be found. Let the Node/Meteor ecosystem handle this dependency so it can automatically pick the right worker. + +``` js +module.exports = defineConfig((Meteor) => { + return { + // .. + ...Meteor.compileWithMeteor([ + // .. + "thread-stream" + ]), + }; +}); +``` + +More info in [this forum post](https://forums.meteor.com/t/new-3-4-beta-12-release-faster-builds-smaller-bundles-and-modern-setups-with-the-rspack-integration/64124/94). + ### Cache Meteor cache remains active and continues to handle Atmosphere packages and intermediate builds. There’s an additional cache layer managed by Rspack to speed up rebuilds for your app code. From fdd2e15cfe47181d344a886a43902de66b50f66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 3 Nov 2025 17:35:02 +0100 Subject: [PATCH 3/4] support rspack.config for typescript extension --- packages/rspack/lib/processes.js | 8 +++++++- .../app/{rspack.config.js => rspack.config.cjs} | 0 .../typescript/{rspack.config.cjs => rspack.config.ts} | 9 ++++++--- tools/modern-tests/monorepo.test.js | 1 + tools/modern-tests/typescript.test.js | 2 +- .../{rspack.config.js => rspack.config.ts} | 10 ++++------ 6 files changed, 19 insertions(+), 11 deletions(-) rename tools/modern-tests/apps/monorepo/app/{rspack.config.js => rspack.config.cjs} (100%) rename tools/modern-tests/apps/typescript/{rspack.config.cjs => rspack.config.ts} (74%) rename tools/static-assets/skel-typescript/{rspack.config.js => rspack.config.ts} (60%) diff --git a/packages/rspack/lib/processes.js b/packages/rspack/lib/processes.js index ed35e57fb4..db408dd486 100644 --- a/packages/rspack/lib/processes.js +++ b/packages/rspack/lib/processes.js @@ -118,6 +118,12 @@ export function getCustomConfigFilePath(basePath = getMeteorAppDir()) { return jsPath; } + // Check for .ts extension next + const tsPath = `${configBasePath}.ts`; + if (fs.existsSync(tsPath)) { + return tsPath; + } + // Check for .mjs extension next const mjsPath = `${configBasePath}.mjs`; if (fs.existsSync(mjsPath)) { @@ -158,7 +164,7 @@ export function getConfigFilePath() { } // If no config file is found, throw an error - throw new Error('Could not find rspack.config.js, rspack.config.mjs, or rspack.config.cjs. Make sure @meteorjs/rspack is installed correctly.'); + throw new Error('Could not find rspack.config.js, rspack.config.ts, rspack.config.mjs, or rspack.config.cjs. Make sure @meteorjs/rspack is installed correctly.'); } /** diff --git a/tools/modern-tests/apps/monorepo/app/rspack.config.js b/tools/modern-tests/apps/monorepo/app/rspack.config.cjs similarity index 100% rename from tools/modern-tests/apps/monorepo/app/rspack.config.js rename to tools/modern-tests/apps/monorepo/app/rspack.config.cjs diff --git a/tools/modern-tests/apps/typescript/rspack.config.cjs b/tools/modern-tests/apps/typescript/rspack.config.ts similarity index 74% rename from tools/modern-tests/apps/typescript/rspack.config.cjs rename to tools/modern-tests/apps/typescript/rspack.config.ts index 5c209dc30e..b85f713ac3 100644 --- a/tools/modern-tests/apps/typescript/rspack.config.cjs +++ b/tools/modern-tests/apps/typescript/rspack.config.ts @@ -1,5 +1,8 @@ -const { defineConfig } = require('@meteorjs/rspack'); -const { TsCheckerRspackPlugin } = require('ts-checker-rspack-plugin'); +import { defineConfig } from "@meteorjs/rspack"; +import { TsCheckerRspackPlugin } from "ts-checker-rspack-plugin"; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); /** * Rspack configuration for Meteor projects. @@ -11,7 +14,7 @@ const { TsCheckerRspackPlugin } = require('ts-checker-rspack-plugin'); * * Use these flags to adjust your build settings based on environment. */ -module.exports = defineConfig(Meteor => { +export default defineConfig((/* Meteor */) => { return { module: { rules: [ diff --git a/tools/modern-tests/monorepo.test.js b/tools/modern-tests/monorepo.test.js index d40c77a544..ab93675695 100644 --- a/tools/modern-tests/monorepo.test.js +++ b/tools/modern-tests/monorepo.test.js @@ -13,6 +13,7 @@ describe('Monorepo App Bundling /', () => { server: 'app/server/main.js', test: 'app/tests/main.test.js' }, + configFile: 'rspack.config.cjs', customAssertions: { afterRunRebuildClient: async ({ allConsoleLogs }) => { // Check for HMR output as enabled by default diff --git a/tools/modern-tests/typescript.test.js b/tools/modern-tests/typescript.test.js index 23e2e40653..e845b865b7 100644 --- a/tools/modern-tests/typescript.test.js +++ b/tools/modern-tests/typescript.test.js @@ -15,7 +15,7 @@ describe('TypeScript App Bundling /', () => { testServer: 'tests/server.ts', }, buildDir: 'build', - configFile: 'rspack.config.cjs', + configFile: 'rspack.config.ts', customAssertions: { afterRun: async ({ result, tempDir }) => { // SCSS styles support diff --git a/tools/static-assets/skel-typescript/rspack.config.js b/tools/static-assets/skel-typescript/rspack.config.ts similarity index 60% rename from tools/static-assets/skel-typescript/rspack.config.js rename to tools/static-assets/skel-typescript/rspack.config.ts index 7537cbfff6..04d51e67bd 100644 --- a/tools/static-assets/skel-typescript/rspack.config.js +++ b/tools/static-assets/skel-typescript/rspack.config.ts @@ -1,5 +1,5 @@ -const { defineConfig } = require('@meteorjs/rspack'); -const { TsCheckerRspackPlugin } = require('ts-checker-rspack-plugin'); +import { defineConfig } from "@meteorjs/rspack"; +import { TsCheckerRspackPlugin } from "ts-checker-rspack-plugin"; /** * Rspack configuration for Meteor projects. @@ -11,10 +11,8 @@ const { TsCheckerRspackPlugin } = require('ts-checker-rspack-plugin'); * * Use these flags to adjust your build settings based on environment. */ -module.exports = defineConfig(Meteor => { +export default defineConfig((/* Meteor */) => { return { - plugins: [ - new TsCheckerRspackPlugin(), - ], + plugins: [new TsCheckerRspackPlugin()], }; }); From 16c5ba40cbf68e58165b34c32cb915a2e3e7bf39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 3 Nov 2025 17:44:29 +0100 Subject: [PATCH 4/4] bump rspack npm package to 0.0.61 to include the latest changes --- npm-packages/meteor-rspack/package-lock.json | 4 ++-- npm-packages/meteor-rspack/package.json | 2 +- packages/rspack/lib/constants.js | 2 +- tools/modern-tests/apps/vue/package.json | 2 +- tools/static-assets/skel-apollo/package.json | 2 +- tools/static-assets/skel-babel/package.json | 2 +- tools/static-assets/skel-blaze/package.json | 2 +- tools/static-assets/skel-chakra-ui/package.json | 2 +- tools/static-assets/skel-coffeescript/package.json | 2 +- tools/static-assets/skel-full/package.json | 2 +- tools/static-assets/skel-react/package.json | 2 +- tools/static-assets/skel-solid/package.json | 2 +- tools/static-assets/skel-svelte/package.json | 2 +- tools/static-assets/skel-tailwind/package.json | 2 +- tools/static-assets/skel-typescript/package.json | 2 +- tools/static-assets/skel-vue/package.json | 2 +- v3-docs/docs/generators/changelog/versions/3.4.0.md | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/npm-packages/meteor-rspack/package-lock.json b/npm-packages/meteor-rspack/package-lock.json index f0f0dca61d..55efd011ac 100644 --- a/npm-packages/meteor-rspack/package-lock.json +++ b/npm-packages/meteor-rspack/package-lock.json @@ -1,12 +1,12 @@ { "name": "@meteorjs/rspack", - "version": "0.0.60", + "version": "0.0.61", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@meteorjs/rspack", - "version": "0.0.60", + "version": "0.0.61", "license": "ISC", "dependencies": { "fast-deep-equal": "^3.1.3", diff --git a/npm-packages/meteor-rspack/package.json b/npm-packages/meteor-rspack/package.json index 413fc02091..f782b9f9f5 100644 --- a/npm-packages/meteor-rspack/package.json +++ b/npm-packages/meteor-rspack/package.json @@ -1,6 +1,6 @@ { "name": "@meteorjs/rspack", - "version": "0.0.60", + "version": "0.0.61", "description": "Configuration logic for using Rspack in Meteor projects", "main": "index.js", "type": "commonjs", diff --git a/packages/rspack/lib/constants.js b/packages/rspack/lib/constants.js index d5b9b850ca..d7c90226b9 100644 --- a/packages/rspack/lib/constants.js +++ b/packages/rspack/lib/constants.js @@ -5,7 +5,7 @@ export const DEFAULT_RSPACK_VERSION = '1.6.0'; -export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.60'; +export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.61'; export const DEFAULT_METEOR_RSPACK_REACT_HMR_VERSION = '1.4.3'; diff --git a/tools/modern-tests/apps/vue/package.json b/tools/modern-tests/apps/vue/package.json index 77ccaa1380..83e6341827 100644 --- a/tools/modern-tests/apps/vue/package.json +++ b/tools/modern-tests/apps/vue/package.json @@ -17,7 +17,7 @@ "vue-router": "^4.2.5" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@tailwindcss/postcss": "^4.1.12", diff --git a/tools/static-assets/skel-apollo/package.json b/tools/static-assets/skel-apollo/package.json index 59e231074e..0241ca0ec2 100644 --- a/tools/static-assets/skel-apollo/package.json +++ b/tools/static-assets/skel-apollo/package.json @@ -20,7 +20,7 @@ "devDependencies": { "@graphql-tools/webpack-loader": "^7.0.0", "@rsdoctor/rspack-plugin": "^1.2.3", - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-babel/package.json b/tools/static-assets/skel-babel/package.json index 14d21e86b2..96d962416e 100644 --- a/tools/static-assets/skel-babel/package.json +++ b/tools/static-assets/skel-babel/package.json @@ -17,7 +17,7 @@ "devDependencies": { "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.23.3", - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-blaze/package.json b/tools/static-assets/skel-blaze/package.json index 63e71e09c8..fa745e73f3 100644 --- a/tools/static-assets/skel-blaze/package.json +++ b/tools/static-assets/skel-blaze/package.json @@ -14,7 +14,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-chakra-ui/package.json b/tools/static-assets/skel-chakra-ui/package.json index 95ed2f6500..c8a637e649 100644 --- a/tools/static-assets/skel-chakra-ui/package.json +++ b/tools/static-assets/skel-chakra-ui/package.json @@ -21,7 +21,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-coffeescript/package.json b/tools/static-assets/skel-coffeescript/package.json index 992fe970bf..dceeb43d6c 100644 --- a/tools/static-assets/skel-coffeescript/package.json +++ b/tools/static-assets/skel-coffeescript/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-full/package.json b/tools/static-assets/skel-full/package.json index eb8d154baf..8a255be5af 100644 --- a/tools/static-assets/skel-full/package.json +++ b/tools/static-assets/skel-full/package.json @@ -12,7 +12,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-react/package.json b/tools/static-assets/skel-react/package.json index d9c4990a97..3c3c1deafa 100644 --- a/tools/static-assets/skel-react/package.json +++ b/tools/static-assets/skel-react/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-solid/package.json b/tools/static-assets/skel-solid/package.json index 6f4c9d50f5..88b94a223a 100644 --- a/tools/static-assets/skel-solid/package.json +++ b/tools/static-assets/skel-solid/package.json @@ -14,7 +14,7 @@ "picocolors": "^1.1.1" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-svelte/package.json b/tools/static-assets/skel-svelte/package.json index b70705115c..96d34723e4 100644 --- a/tools/static-assets/skel-svelte/package.json +++ b/tools/static-assets/skel-svelte/package.json @@ -13,7 +13,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-tailwind/package.json b/tools/static-assets/skel-tailwind/package.json index 0d27ee9dc6..ede528f947 100644 --- a/tools/static-assets/skel-tailwind/package.json +++ b/tools/static-assets/skel-tailwind/package.json @@ -16,7 +16,7 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index ab2804620d..2650fa9857 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index 8c0ec9f99c..e083889b4b 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -17,7 +17,7 @@ "vue-router": "^4.2.5" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.60", + "@meteorjs/rspack": "^0.0.61", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.6.0", "@rspack/core": "^1.6.0", diff --git a/v3-docs/docs/generators/changelog/versions/3.4.0.md b/v3-docs/docs/generators/changelog/versions/3.4.0.md index fe7d1895a8..49ac4a0b8b 100644 --- a/v3-docs/docs/generators/changelog/versions/3.4.0.md +++ b/v3-docs/docs/generators/changelog/versions/3.4.0.md @@ -99,7 +99,7 @@ If you find any issues, please report them to the [Meteor issues tracker](https: #### Bumped NPM Packages -- @meteorjs/rspack@0.0.60 +- @meteorjs/rspack@0.0.61 #### Special thanks to