diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap index 51ea03a17..85e10c856 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap @@ -331,6 +331,10 @@ exports[`angular configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -748,6 +752,10 @@ exports[`angular configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap index 658a93148..bc6600d08 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/base.spec.ts.snap @@ -242,6 +242,10 @@ exports[`base configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -556,6 +560,10 @@ exports[`base configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/javascript.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/javascript.spec.ts.snap index 22ba2df01..a71dcd704 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/javascript.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/javascript.spec.ts.snap @@ -242,6 +242,10 @@ exports[`javascript configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -565,6 +569,10 @@ exports[`javascript configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/react.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/react.spec.ts.snap index 501497ffe..923b82741 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/react.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/react.spec.ts.snap @@ -264,6 +264,10 @@ exports[`react configuration > android > adds ReactRefreshWebpackPlugin when HMR new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -589,6 +593,10 @@ exports[`react configuration > android > base config 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -921,6 +929,10 @@ exports[`react configuration > ios > adds ReactRefreshWebpackPlugin when HMR ena new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -1247,6 +1259,10 @@ exports[`react configuration > ios > base config 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/svelte.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/svelte.spec.ts.snap index e55821c56..0d39260c5 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/svelte.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/svelte.spec.ts.snap @@ -269,6 +269,10 @@ exports[`svelte configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -604,6 +608,10 @@ exports[`svelte configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/typescript.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/typescript.spec.ts.snap index e5cad4940..595dc6c2c 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/typescript.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/typescript.spec.ts.snap @@ -242,6 +242,10 @@ exports[`typescript configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -565,6 +569,10 @@ exports[`typescript configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap index 87bf13417..a1dd43938 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap @@ -282,6 +282,10 @@ exports[`vue configuration for android 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(ios)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { @@ -630,6 +634,10 @@ exports[`vue configuration for ios 1`] = ` new ContextExclusionPlugin( /(.*)App_Resources(.*)/ ), + /* config.plugin('ContextExclusionPlugin|Other_Platforms') */ + new ContextExclusionPlugin( + /\\\\.(android)\\\\.(\\\\w+)$/ + ), /* config.plugin('DefinePlugin') */ new DefinePlugin( { diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index 0c2659f6d..79cc6e049 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -22,8 +22,9 @@ import { env as _env, IWebpackEnv } from '../index'; import { getValue } from '../helpers/config'; import { getIPS } from '../helpers/host'; import { - getPlatformName, + getAvailablePlatforms, getAbsoluteDistPath, + getPlatformName, getEntryDirPath, getEntryPath, } from '../helpers/platform'; @@ -365,6 +366,18 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { .plugin('ContextExclusionPlugin|App_Resources') .use(ContextExclusionPlugin, [new RegExp(`(.*)App_Resources(.*)`)]); + // Makes sure that require.context will never include code from + // another platform (ie .android.ts when building for ios) + const otherPlatformsRE = getAvailablePlatforms() + .filter((platform) => platform !== getPlatformName()) + .join('|'); + + config + .plugin('ContextExclusionPlugin|Other_Platforms') + .use(ContextExclusionPlugin, [ + new RegExp(`\\.(${otherPlatformsRE})\\.(\\w+)$`), + ]); + // Filter common undesirable warnings config.set( 'ignoreWarnings', diff --git a/packages/webpack5/src/helpers/platform.ts b/packages/webpack5/src/helpers/platform.ts index f59389af1..1e07b62b3 100644 --- a/packages/webpack5/src/helpers/platform.ts +++ b/packages/webpack5/src/helpers/platform.ts @@ -40,6 +40,13 @@ export function getPlatform(): INativeScriptPlatform { return platforms[getPlatformName()]; } +/** + * Utility to get all registered/available platforms + */ +export function getAvailablePlatforms(): string[] { + return Object.keys(platforms); +} + /** * Utility to get the currently targeted platform name */ @@ -61,7 +68,7 @@ export function getPlatformName(): Platform { throw error(` Invalid platform: ${env.platform} - Valid platforms: ${Object.keys(platforms).join(', ')} + Valid platforms: ${getAvailablePlatforms().join(', ')} `); }