mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
ac106cc432
Prior to this change the FESM bundles have the license banner duplicated multiple of times in each published file. With this change we remove all the banners from the individual input files. A new banner will be appended at the top of the FESM using rollup's banner option. While there is a rollup plugin on NPM to strip these banners (https://github.com/mjeanroy/rollup-plugin-strip-banner) we could not use this as it does not support `.mjs`. PR Close #48560
85 lines
2.5 KiB
JavaScript
85 lines
2.5 KiB
JavaScript
const node = require('@rollup/plugin-node-resolve').default;
|
|
const commonjs = require('@rollup/plugin-commonjs');
|
|
const MagicString = require('magic-string');
|
|
|
|
// Parse the stamp file produced by Bazel from the version control system
|
|
let version = '<unknown>';
|
|
if (bazel_version_file) {
|
|
const versionTag = require('fs')
|
|
.readFileSync(bazel_version_file, {encoding: 'utf-8'})
|
|
.split('\n')
|
|
.find((s) => s.startsWith('BUILD_SCM_VERSION'));
|
|
// Don't assume BUILD_SCM_VERSION exists
|
|
if (versionTag) {
|
|
version = versionTag.split(' ')[1].trim();
|
|
}
|
|
}
|
|
|
|
/** Removed license banners from input files. */
|
|
const stripBannerPlugin = {
|
|
name: 'strip-license-banner',
|
|
transform(code, _filePath) {
|
|
const banner = /(\/\**\s+\*\s@license.*?\*\/)/s.exec(code);
|
|
if (!banner) {
|
|
return;
|
|
}
|
|
|
|
const [bannerContent] = banner;
|
|
const magicString = new MagicString(code);
|
|
const pos = code.indexOf(bannerContent);
|
|
magicString.remove(pos, pos + bannerContent.length).trimStart();
|
|
|
|
return {
|
|
code: magicString.toString(),
|
|
map: magicString.generateMap({
|
|
hires: true,
|
|
}),
|
|
};
|
|
},
|
|
};
|
|
|
|
// Add 'use strict' to the bundle, https://github.com/angular/angular/pull/40456
|
|
// When rollup build esm bundle of zone.js, there will be no 'use strict'
|
|
// since all esm bundles are `strict`, but when webpack load the esm bundle,
|
|
// because zone.js is a module without export and import, webpack is unable
|
|
// to determine the bundle is `esm` module or not, so it doesn't add the 'use strict'
|
|
// which webpack does to all other `esm` modules which has export or import.
|
|
// And it causes issues such as https://github.com/angular/angular/issues/40215
|
|
// `this` should be `undefined` but is assigned with `Window` instead.
|
|
const banner = `'use strict';
|
|
/**
|
|
* @license Angular v${version}
|
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
* License: MIT
|
|
*/`;
|
|
|
|
module.exports = {
|
|
plugins: [
|
|
node({
|
|
mainFields: ['es2015', 'module', 'jsnext:main', 'main'],
|
|
}),
|
|
commonjs(),
|
|
stripBannerPlugin,
|
|
],
|
|
external: (id) => {
|
|
if (/zone\.js[\\/]lib/.test(id)) {
|
|
return false;
|
|
}
|
|
|
|
return /rxjs|electron/.test(id);
|
|
},
|
|
output: {
|
|
globals: {
|
|
electron: 'electron',
|
|
'rxjs/Observable': 'Rx',
|
|
'rxjs/Subscriber': 'Rx',
|
|
'rxjs/Subscription': 'Rx',
|
|
'rxjs/Scheduler': 'Rx.Scheduler',
|
|
'rxjs/scheduler/asap': 'Rx.Scheduler',
|
|
'rxjs/scheduler/async': 'Rx.Scheduler',
|
|
'rxjs/symbol/rxSubscriber': 'Rx.Symbol',
|
|
},
|
|
banner,
|
|
},
|
|
};
|