diff --git a/packages/builders/package.json b/packages/builders/package.json index 07bc0848b6..d14dd253d4 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -33,6 +33,7 @@ "identity-obj-proxy": "3.0.0", "license-webpack-plugin": "^1.4.0", "rxjs": "6.3.3", + "source-map-support": "0.5.11", "ts-loader": "5.3.1", "webpack": "4.29.0", "webpack-dev-server": "3.1.14", diff --git a/packages/builders/src/utils/webpack/node.config.spec.ts b/packages/builders/src/utils/webpack/node.config.spec.ts index 9459555b15..3f0f6c2510 100644 --- a/packages/builders/src/utils/webpack/node.config.spec.ts +++ b/packages/builders/src/utils/webpack/node.config.spec.ts @@ -1,6 +1,7 @@ import { getNodeWebpackConfig } from './node.config'; import { getSystemPath, normalize } from '@angular-devkit/core'; import { BuildNodeBuilderOptions } from '../../node/build/node-build.builder'; +import { BannerPlugin } from 'webpack'; describe('getNodePartial', () => { let input: BuildNodeBuilderOptions; @@ -84,4 +85,25 @@ describe('getNodePartial', () => { expect(result.externals).not.toBeDefined(); }); }); + + describe('the sourceMap option when true', () => { + it('should add a BannerPlugin', () => { + const result = getNodeWebpackConfig({ + ...input, + sourceMap: true + }); + + const bannerPlugin = result.plugins.find( + plugin => plugin instanceof BannerPlugin + ) as BannerPlugin; + const options = (bannerPlugin).options; + + expect(bannerPlugin).toBeTruthy(); + expect(options.banner).toEqual( + 'require("source-map-support").install();' + ); + expect(options.raw).toEqual(true); + expect(options.entryOnly).toEqual(false); + }); + }); }); diff --git a/packages/builders/src/utils/webpack/node.config.ts b/packages/builders/src/utils/webpack/node.config.ts index f67c8c9ddb..056a2ee83f 100644 --- a/packages/builders/src/utils/webpack/node.config.ts +++ b/packages/builders/src/utils/webpack/node.config.ts @@ -1,4 +1,4 @@ -import { Configuration } from 'webpack'; +import { Configuration, BannerPlugin } from 'webpack'; import * as mergeWebpack from 'webpack-merge'; import * as nodeExternals from 'webpack-node-externals'; @@ -35,6 +35,16 @@ function getNodePartial(options: BuildNodeBuilderOptions) { } ]; } + + if (options.sourceMap) { + webpackConfig.plugins = [ + new BannerPlugin({ + banner: 'require("source-map-support").install();', + raw: true, + entryOnly: false + }) + ]; + } return webpackConfig; }