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

Geo*_*242 4 compilation compiler-warnings typescript angular 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)
Run Code Online (Sandbox Code Playgroud)

这是导致这种情况的来源之一......

export const selectTotalAccountCodes = createSelector(selectSharedAccountCodeState,
  (state: SharedAccountCodeState) => state.totalItems);
Run Code Online (Sandbox Code Playgroud)

编译器出于某种原因接受函数参数并将其分配给 aconst然后像这样导出它......

const ?0 = (state) => state.totalItems;
export const selectTotalAccountCodes = createSelector(selectSharedAccountCodeState, ?0);
export { ?0 };
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*udo 7

我在更新到 Angular 9 时收到了同样的警告,在网上寻找一些信息/解决方案我还发现了这个 Angular 问题页面https://github.com/angular/angular/issues/33668 ( 11/2019所以3个月前),他们说这是常春藤的问题,与“出口*”有关。

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

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

但我真的不知道这是否是一个好的解决方案,或者只是显示警告是否更好..