diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap index 3b153662c..d6d658648 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/angular.spec.ts.snap @@ -206,7 +206,7 @@ exports[`angular configuration for android 1`] = ` use: [ /* config.module.rule('angular-webpack-loader').use('webpack-loader') */ { - loader: '@angular-devkit/build-angular/src/babel/webpack-loader', + loader: '/node_modules/@angular-devkit/build-angular/src/tools/babel/webpack-loader.js', options: { aot: true } @@ -632,7 +632,7 @@ exports[`angular configuration for ios 1`] = ` use: [ /* config.module.rule('angular-webpack-loader').use('webpack-loader') */ { - loader: '@angular-devkit/build-angular/src/babel/webpack-loader', + loader: '/node_modules/@angular-devkit/build-angular/src/tools/babel/webpack-loader.js', options: { aot: true } diff --git a/packages/webpack5/jest.config.js b/packages/webpack5/jest.config.js index ace328d00..5da7aa353 100644 --- a/packages/webpack5/jest.config.js +++ b/packages/webpack5/jest.config.js @@ -13,5 +13,6 @@ module.exports = { ], globals: { __TEST__: true, - } + }, + resolver: '/scripts/resolver.js', }; diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 946fc6ff3..c55860225 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -54,19 +54,19 @@ "webpack-virtual-modules": "^0.4.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^15.0.1", + "@angular-devkit/build-angular": "^16.1.0", "@types/css": "0.0.33", - "@types/jest": "29.4.0", + "@types/jest": "29.5.2", "@types/loader-utils": "2.0.3", "@types/lodash.get": "4.4.7", "@types/micromatch": "4.0.2", "@types/sax": "1.2.4", "@types/terser-webpack-plugin": "5.2.0", "@types/webpack-virtual-modules": "0.1.1", - "jest": "29.4.1", + "jest": "29.5.0", "jest-matcher-utils": "29.4.1", "nativescript-vue-template-compiler": "2.9.3", - "ts-jest": "29.0.5", + "ts-jest": "29.1.0", "typescript": "~4.9.5" }, "peerDependencies": { diff --git a/packages/webpack5/scripts/resolver.js b/packages/webpack5/scripts/resolver.js new file mode 100644 index 000000000..d5b045431 --- /dev/null +++ b/packages/webpack5/scripts/resolver.js @@ -0,0 +1,16 @@ +const { relative, join } = require('path'); + +const packagesToMakeRelative = new Set([ + '@angular-devkit/build-angular/src/tools/babel/webpack-loader', + '@angular-devkit/build-angular/src/babel/webpack-loader', +]); + +function resolver(path, options) { + const defaultResolver = options.defaultResolver(path, options); + if (typeof defaultResolver === 'string' && packagesToMakeRelative.has(path)) { + return join('', relative(join(__dirname, '..'), defaultResolver)); + } + return defaultResolver; +} + +module.exports = resolver; diff --git a/packages/webpack5/src/configuration/angular.ts b/packages/webpack5/src/configuration/angular.ts index c925f5e3a..a106a114d 100644 --- a/packages/webpack5/src/configuration/angular.ts +++ b/packages/webpack5/src/configuration/angular.ts @@ -214,7 +214,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { .end() .before('angular') .use('webpack-loader') - .loader('@angular-devkit/build-angular/src/babel/webpack-loader') + .loader(getWebpackLoaderPath()) .options(buildAngularOptions); } else { warnOnce( @@ -334,3 +334,24 @@ function getBuildAngularMajorVersion() { return null; } + +function tryRequireResolve(path: string) { + try { + return require.resolve(path); + } catch (err) { + return null; + } +} + +function getWebpackLoaderPath() { + return ( + tryRequireResolve( + '@angular-devkit/build-angular/src/babel/webpack-loader' + ) || + tryRequireResolve( + '@angular-devkit/build-angular/src/tools/babel/webpack-loader' + ) || + // fallback to angular 16.1+ + '@angular-devkit/build-angular/src/tools/babel/webpack-loader' + ); +}