Skip to content

Commit 484c94e

Browse files
clydinmgechev
authored andcommitted
refactor(@angular-devkit/build-angular): support Webpack with no node shims
Webpack 5+ no longer provides node shims by default. The dev-server builder previously assumed that Webpack would provide them. This change adds a conditional check to cover both cases.
1 parent f6d9e85 commit 484c94e

File tree

1 file changed

+34
-28
lines changed
  • packages/angular_devkit/build_angular/src/dev-server

1 file changed

+34
-28
lines changed

packages/angular_devkit/build_angular/src/dev-server/index.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -503,37 +503,43 @@ function _addLiveReload(
503503

504504
// Workaround node shim hoisting issues with live reload client
505505
// Only needed in dev server mode to support live reload capabilities in all package managers
506-
const webpackPath = path.dirname(require.resolve('webpack/package.json'));
507-
const nodeLibsBrowserPath = require.resolve('node-libs-browser', { paths: [webpackPath] });
508-
const nodeLibsBrowser = require(nodeLibsBrowserPath);
509-
webpackConfig.plugins.push(
510-
new webpack.NormalModuleReplacementPlugin(
511-
/^events|url|querystring$/,
512-
(resource: { issuer?: string; request: string }) => {
513-
if (!resource.issuer) {
514-
return;
515-
}
516-
if (/[\/\\]hot[\/\\]emitter\.js$/.test(resource.issuer)) {
517-
if (resource.request === 'events') {
518-
resource.request = nodeLibsBrowser.events;
506+
// Not needed in Webpack 5 - node-libs-browser will not be present in webpack 5
507+
let nodeLibsBrowserPath;
508+
try {
509+
const webpackPath = path.dirname(require.resolve('webpack/package.json'));
510+
nodeLibsBrowserPath = require.resolve('node-libs-browser', { paths: [webpackPath] });
511+
} catch {}
512+
if (nodeLibsBrowserPath) {
513+
const nodeLibsBrowser = require(nodeLibsBrowserPath);
514+
webpackConfig.plugins.push(
515+
new webpack.NormalModuleReplacementPlugin(
516+
/^events|url|querystring$/,
517+
(resource: { issuer?: string; request: string }) => {
518+
if (!resource.issuer) {
519+
return;
519520
}
520-
} else if (
521-
/[\/\\]webpack-dev-server[\/\\]client[\/\\]utils[\/\\]createSocketUrl\.js$/.test(
522-
resource.issuer,
523-
)
524-
) {
525-
switch (resource.request) {
526-
case 'url':
527-
resource.request = nodeLibsBrowser.url;
528-
break;
529-
case 'querystring':
530-
resource.request = nodeLibsBrowser.querystring;
531-
break;
521+
if (/[\/\\]hot[\/\\]emitter\.js$/.test(resource.issuer)) {
522+
if (resource.request === 'events') {
523+
resource.request = nodeLibsBrowser.events;
524+
}
525+
} else if (
526+
/[\/\\]webpack-dev-server[\/\\]client[\/\\]utils[\/\\]createSocketUrl\.js$/.test(
527+
resource.issuer,
528+
)
529+
) {
530+
switch (resource.request) {
531+
case 'url':
532+
resource.request = nodeLibsBrowser.url;
533+
break;
534+
case 'querystring':
535+
resource.request = nodeLibsBrowser.querystring;
536+
break;
537+
}
532538
}
539+
},
540+
),
541+
);
533542
}
534-
},
535-
),
536-
);
537543

538544
// This allows for live reload of page when changes are made to repo.
539545
// https://webpack.js.org/configuration/dev-server/#devserver-inline

0 commit comments

Comments
 (0)