feat(ivy): show error when trying to publish NGCC'd packages (#32031)
Publishing of NGCC packages should not be allowed. It is easy for a user to publish an NGCC'd version of a library they have workspace libraries which are being used in a workspace application. If a users builds a library and afterwards the application, the library will be transformed with NGCC and since NGCC taints the distributed files that should be published. With this change we use the npm/yarn `prepublishOnly` hook to display and error and abort the process with a non zero error code when a user tries to publish an NGCC version of the package. More info: https://docs.npmjs.com/misc/scripts PR Close #32031
This commit is contained in:

committed by
Alex Rickabaugh

parent
f7eebd0227
commit
46304a4f83
@ -57,6 +57,17 @@ export function markAsProcessed(
|
||||
processed[prop] = NGCC_VERSION;
|
||||
}
|
||||
|
||||
const scripts = packageJson.scripts || (packageJson.scripts = {});
|
||||
scripts.prepublishOnly__ivy_ngcc_bak =
|
||||
scripts.prepublishOnly__ivy_ngcc_bak || scripts.prepublishOnly;
|
||||
|
||||
scripts.prepublishOnly = 'node --eval \"console.error(\'' +
|
||||
'ERROR: Trying to publish a package that has been compiled by NGCC. This is not allowed.\\n' +
|
||||
'Please delete and rebuild the package, without compiling with NGCC, before attempting to publish.\\n' +
|
||||
'Note that NGCC may have been run by importing this package into another project that is being built with Ivy enabled.\\n' +
|
||||
'\')\" ' +
|
||||
'&& exit 1';
|
||||
|
||||
// Just in case this package.json was synthesized due to a custom configuration
|
||||
// we will ensure that the path to the containing folder exists before we write the file.
|
||||
fs.ensureDir(dirname(packageJsonPath));
|
||||
|
@ -55,7 +55,8 @@ export interface PackageJsonFormatProperties {
|
||||
*/
|
||||
export interface EntryPointPackageJson extends PackageJsonFormatProperties {
|
||||
name: string;
|
||||
__processed_by_ivy_ngcc__?: {[key: string]: string};
|
||||
scripts?: Record<string, string>;
|
||||
__processed_by_ivy_ngcc__?: Record<string, string>;
|
||||
}
|
||||
|
||||
export type EntryPointJsonProperty = Exclude<keyof PackageJsonFormatProperties, 'types'|'typings'>;
|
||||
|
Reference in New Issue
Block a user