Typescript:使用 ng-packagr 编译 Angular 9 项目时出现命名空间冲突警告

Typescript: conflicting namespaces warning on Angular 9 project compilation with ng-packagr

我不确定这个问题到底应该归咎于什么。我认为它是 Typescript,但它可能是 ng-packagr 或 Angular。当我更新到 Angular 9.

时才开始

这是我在生产版本中收到的消息...

WARNING: Conflicting namespaces: dist/web-apps-shared/esm2015/public_api.js re-exports 'ɵ0' from both dist/web-apps-shared/esm2015/lib/api-applications/reducers.js and dist/web-apps-shared/esm2015/lib/account-codes/reducers.js (will be ignored)

这是导致此问题的来源之一...

export const selectTotalAccountCodes = createSelector(selectSharedAccountCodeState,
  (state: SharedAccountCodeState) => state.totalItems);

出于某种原因,编译器获取函数参数并将其分配给 const,然后像这样导出它...

const ɵ0 = (state) => state.totalItems;
export const selectTotalAccountCodes = createSelector(selectSharedAccountCodeState, ɵ0);
export { ɵ0 };

我的问题是,为什么 ɵ0 需要导出?它仅在该文件内部使用。我错过了什么吗?应该担心这个吗?使用此代码构建的库时,它似乎没有引起问题。

我在更新到 Angular 9 时收到了同样的警告,在网上寻找一些 info/solutions 我也找到了这个 Angular 问题页面 https://github.com/angular/angular/issues/33668(11/2019 所以 3 个月前),他们说这是 Ivy 的问题,与 "export * ".

有关

这很奇怪,因为我需要发布到 npm 并且构建建议说禁用 Ivy ,所以我禁用了它(tsconfig.lib.json 中的 angularCompilerOptions.enableIvy false):相反,将 enableIvy 设置为 true使警告消失。

所以我做了这个尝试,同时在 tsconfig.lib.json 中将 enableIvy 设置为 false,在 public-api.ts 中我修改了 "export * " 替换了“ *" 与所有导出的对象,一个接一个:警告消失,库正在运行。

但我真的不知道这是一个很好的修复,还是只显示警告更好..