diff --git a/packages/rspack/lib/config.js b/packages/rspack/lib/config.js index 88c0e4cd9a..24fc73a6d9 100644 --- a/packages/rspack/lib/config.js +++ b/packages/rspack/lib/config.js @@ -20,6 +20,7 @@ const { isMeteorBlazeProject, isMeteorLessProject, isMeteorScssProject, + getMeteorEnvPackageDirs, } = require('meteor/tools-core/lib/meteor'); import { getInitialEntrypoints } from './build-context'; @@ -107,11 +108,21 @@ export function configureMeteorForRspack() { dir => !includedDirs.includes(dir), ); + const envPackageDirs = getMeteorEnvPackageDirs().map( + dir => path.normalize(dir)?.split(path.sep)?.filter(Boolean)?.[0], + ); let extraFoldersToIgnore = [ ...ignoredDirs .filter( dir => - !['public', 'private', '.meteor', 'packages', RSPACK_BUILD_CONTEXT].includes(dir), + ![ + 'public', + 'private', + '.meteor', + 'packages', + ...envPackageDirs, + RSPACK_BUILD_CONTEXT, + ].includes(dir), ) .map(dir => `${dir}/**`), ]; diff --git a/packages/tools-core/lib/meteor.js b/packages/tools-core/lib/meteor.js index 47b2c8eae5..5dec528f61 100644 --- a/packages/tools-core/lib/meteor.js +++ b/packages/tools-core/lib/meteor.js @@ -411,3 +411,19 @@ export function isMeteorBundleVisualizerProject() { export function isMeteorPackagesTest() { return Package?.meteor?.global?.currentCommand?.name === 'test-packages'; } + +/** + * Gets the package directories from the environment variables. + * @returns {string[]} + */ +export function getMeteorEnvPackageDirs() { + function packageDirsFromEnvVar(envVar, delimiter = path.delimiter) { + return process.env[envVar] && process.env[envVar].split(delimiter) || []; + } + return [ + // METEOR_PACKAGE_DIRS should use the arch-specific delimiter + ...(packageDirsFromEnvVar('METEOR_PACKAGE_DIRS', path.delimiter || ':')), + // PACKAGE_DIRS (deprecated) always used ':' separator (yes, even Windows) + ...(packageDirsFromEnvVar('PACKAGE_DIRS', ':')), + ]; +}