From fb3aeff59a0b609740a6909eea9d8418b9476c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Mon, 1 Sep 2025 10:05:29 +0200 Subject: [PATCH] update Meteor Rspack to support cross-os multiline banner output --- npm-packages/meteor-rspack/package-lock.json | 4 +-- npm-packages/meteor-rspack/package.json | 2 +- npm-packages/meteor-rspack/rspack.config.js | 2 +- packages/rspack/lib/constants.js | 2 +- packages/rspack/lib/processes.js | 28 ++++++++++++++----- tools/modern-tests/apps/vue/package.json | 2 +- tools/static-assets/skel-apollo/package.json | 2 +- tools/static-assets/skel-blaze/package.json | 2 +- .../static-assets/skel-chakra-ui/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 +- .../static-assets/skel-tailwind/package.json | 2 +- .../skel-typescript/package.json | 2 +- tools/static-assets/skel-vue/package.json | 2 +- 16 files changed, 37 insertions(+), 23 deletions(-) diff --git a/npm-packages/meteor-rspack/package-lock.json b/npm-packages/meteor-rspack/package-lock.json index 4212d497e0..dc8ad16ba2 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.36", + "version": "0.0.37", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@meteorjs/rspack", - "version": "0.0.36", + "version": "0.0.37", "license": "ISC", "dependencies": { "ignore-loader": "^0.1.2", diff --git a/npm-packages/meteor-rspack/package.json b/npm-packages/meteor-rspack/package.json index ae82b79cbe..54d284ce2d 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.36", + "version": "0.0.37", "description": "Configuration logic for using Rspack in Meteor projects", "main": "index.js", "type": "module", diff --git a/npm-packages/meteor-rspack/rspack.config.js b/npm-packages/meteor-rspack/rspack.config.js index 6353ea1c74..6f1ca23c17 100644 --- a/npm-packages/meteor-rspack/rspack.config.js +++ b/npm-packages/meteor-rspack/rspack.config.js @@ -147,7 +147,7 @@ export default function (inMeteor = {}, argv = {}) { const runPath = Meteor.runPath; // Determine banner - const bannerOutput = JSON.parse(Meteor.bannerOutput || ''); + const bannerOutput = JSON.parse(Meteor.bannerOutput || process.env.RSPACK_BANNER || ''); // Determine output directories const clientOutputDir = path.resolve(process.cwd(), 'public'); diff --git a/packages/rspack/lib/constants.js b/packages/rspack/lib/constants.js index be6612be89..38feda447c 100644 --- a/packages/rspack/lib/constants.js +++ b/packages/rspack/lib/constants.js @@ -5,7 +5,7 @@ export const DEFAULT_RSPACK_VERSION = '1.5.0'; -export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.36'; +export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.37'; export const DEFAULT_METEOR_RSPACK_REACT_HMR_VERSION = '1.4.3'; diff --git a/packages/rspack/lib/processes.js b/packages/rspack/lib/processes.js index 8e3d3c3e25..d8e5711ea0 100644 --- a/packages/rspack/lib/processes.js +++ b/packages/rspack/lib/processes.js @@ -59,11 +59,11 @@ export function getConfigFileName() { } /** - * Gets the appropriate Rspack environment variables + * Gets the appropriate Rspack environment variables and command line arguments * @param {Object} options - Options for environment variables * @param {boolean} options.isClient - Whether this is for client-side build * @param {boolean} options.isServer - Whether this is for server-side build - * @returns {string[]} Array of command line arguments for Rspack + * @returns {Object} Object containing params (command line arguments) and envs (environment variables) */ export function getRspackEnv({ isClient, isServer, isTest: inIsTest }) { const RSPACK_BUILD_CONTEXT = require('./constants').RSPACK_BUILD_CONTEXT; @@ -127,7 +127,6 @@ export function getRspackEnv({ isClient, isServer, isTest: inIsTest }) { }), ], ['runPath', getBuildFilePath({ ...module, ...env, ...side, ...commandRole }) ], - ['bannerOutput', JSON.stringify(getBuildFileContent({ ...module, ...env, ...side, role: FILE_ROLE.output }))], ['buildContext', RSPACK_BUILD_CONTEXT], ['chunksContext', RSPACK_CHUNKS_CONTEXT], ['assetsContext', RSPACK_ASSETS_CONTEXT], @@ -142,10 +141,19 @@ export function getRspackEnv({ isClient, isServer, isTest: inIsTest }) { ...(isBundleVisualizerEnabled && [['isBundleVisualizerEnabled', isBundleVisualizerEnabled]] || []), ].filter(Boolean); - return pairs.flatMap(([key, val]) => [ + + // Create environment variables object with bannerOutput + const envs = { + RSPACK_BANNER: JSON.stringify(getBuildFileContent({ ...module, ...env, ...side, role: FILE_ROLE.output })) + }; + + // Create params from pairs + const params = pairs.flatMap(([key, val]) => [ '--env', `${key}=${val}` ]); + + return { params, envs }; } /** @@ -166,11 +174,13 @@ export function startRspackClientServe(options = {}) { const appDir = getMeteorAppDir(); const configFile = getConfigFileName(); - const { command, args } = getNpxCommand(['rspack', 'serve', '--config', configFile, ...getRspackEnv({ isClient: true, isServer: false })]); + const { params, envs } = getRspackEnv({ isClient: true, isServer: false }); + const { command, args } = getNpxCommand(['rspack', 'serve', '--config', configFile, ...params]); const newClientProcess = spawnProcess( command, args, { cwd: appDir, + env: { ...process.env, ...envs }, onStdout: (data) => { logInfo(`[Rspack Client] ${data}`); if (onCompile && data.trim().includes("compiled")) { @@ -219,11 +229,13 @@ export function startRspackServerWatch(options = {}) { const appDir = getMeteorAppDir(); const configFile = getConfigFileName(); - const { command, args } = getNpxCommand(['rspack', 'build', '--watch', '--config', configFile, ...getRspackEnv({ isClient: false, isServer: true })]); + const { params, envs } = getRspackEnv({ isClient: false, isServer: true }); + const { command, args } = getNpxCommand(['rspack', 'build', '--watch', '--config', configFile, ...params]); const newServerProcess = spawnProcess( command, args, { cwd: appDir, + env: { ...process.env, ...envs }, onStdout: (data) => { logInfo(`[Rspack Server] ${data}`); if (onCompile && data.trim().includes("compiled")) { @@ -267,13 +279,14 @@ export async function runRspackBuild({ isClient, isServer, isTest, isTestModule, const endpoint = isTestModule ? 'Module' : isClient ? 'Client' : 'Server'; // Use a promise to ensure Meteor waits until Rspack finishes return new Promise((resolve, reject) => { + const { params, envs } = getRspackEnv({ isClient, isServer, isTest, isTestModule }); const rspackArgs = [ 'rspack', 'build', '--config', configFile, ...(watch && ['--watch']) || [], - ...getRspackEnv({ isClient, isServer, isTest, isTestModule }), + ...params, ].filter(Boolean); const { command, args } = getNpxCommand(rspackArgs); spawnProcess( @@ -281,6 +294,7 @@ export async function runRspackBuild({ isClient, isServer, isTest, isTestModule, args, { cwd: appDir, + env: { ...process.env, ...envs }, onStdout: (data) => { logInfo(`[Rspack ${label} ${endpoint}] ${data}`); if (onCompile && data.trim().includes("compiled")) { diff --git a/tools/modern-tests/apps/vue/package.json b/tools/modern-tests/apps/vue/package.json index 1382eb9343..484f49d625 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.36", + "@meteorjs/rspack": "^0.0.37", "@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 a279c6efb1..a91e0e1a7f 100644 --- a/tools/static-assets/skel-apollo/package.json +++ b/tools/static-assets/skel-apollo/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@graphql-tools/webpack-loader": "^7.0.0", - "@meteorjs/rspack": "^0.0.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-blaze/package.json b/tools/static-assets/skel-blaze/package.json index 00acd48a68..bbf890c782 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3" diff --git a/tools/static-assets/skel-chakra-ui/package.json b/tools/static-assets/skel-chakra-ui/package.json index 1cf029a02b..bf80596691 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-full/package.json b/tools/static-assets/skel-full/package.json index 5a01cbf5a2..9a07a342bc 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "chai": "^4.2.0" diff --git a/tools/static-assets/skel-react/package.json b/tools/static-assets/skel-react/package.json index 57fc97da89..b768e29663 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-solid/package.json b/tools/static-assets/skel-solid/package.json index 96d59a6cc2..7e5300ce14 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "babel-loader": "10.0.0", diff --git a/tools/static-assets/skel-svelte/package.json b/tools/static-assets/skel-svelte/package.json index e9b8685e6c..5ae3fd5dcd 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "postcss-load-config": "^5.1.0", diff --git a/tools/static-assets/skel-tailwind/package.json b/tools/static-assets/skel-tailwind/package.json index 01f39f4843..92b53c8a33 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index 17246553fe..e9d8e1dfe1 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index 8301779900..bfbc113337 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.36", + "@meteorjs/rspack": "^0.0.37", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@tailwindcss/postcss": "^4.1.12",