npmrunbuild:mylibnpmrun执行的目标build:mylib在package.json中定义:实际执行的命令是:yarn--cwdfeature-libs/my-lib&&ngbuildmy-lib--configurationproductionngbuild:将Angular应用程序编译到给定输出路径下名为dist/的输出目录中。该命令必须在工作空间目录下执行。当用于构建库时,将调用其他构建器并且仅应用ts-config、configuration和watch选项。使用CLI创建项目时,默认情况下会创建“生产”配置,并且可以通过指定--configuration="production"或--prod选项来使用。如果遇到报错信息:[error]Error:UnabletowriteareferencetoUrlPipeinC:/Code/SPA/mySPA/spartacus/projects/core/src/routing/configurable-routes/url-translation/url.pipe.ts来自C:/Code/SPA/mySPA/spartacus/projects/core/src/routing/configurable-routes/url-translation/url.module.tsatReferenceEmitter.emit(C:\Code\SPA\mySPA\spartacus\node_modules\@angular\compiler-cli\src\ngtsc\imports\src\emitter.js:85:19)为什么my-lib与核心文件夹中的url.pipe.ts相关联?新建一个空的test-lib,然后ngbuild看看是否有同样的错误。没有问题。我发现只要importICON_TYPE,就会出现这个错误:当我把上图中第2行代码注释掉后,构建错误就消失了:查看其他Spartacus库的ng-package.json文件,及其lib区域有指向@spartacus/storefront的引用:AddICON_TYPEreferencestothenewcreatedtest-libservice:anerroroccurredimmediately:经过研究,发现在Angular库项目文件夹下的tsconfig.lib.json文件中,添加@Spartacus/core并且引用@Spartacus/storefront可以达到目的:构建成功通过:许多JavaScript库,例如jQuery、Jasmine测试库和Angular,用新的特性和语法扩展了JavaScript环境。而且TypeScript编译器本身无法识别它们。当编译器无法识别它时,它会抛出一个错误。您可以使用TypeScript类型定义文件——.d.ts文件——来告诉编译器您要加载的库的类型定义。支持TypeScript的编辑器依靠这些定义文件来显示这些库中各个功能的类型定义。许多库将它们的类型定义文件包含在它们的npm包中,TypeScript编译器和编辑器可以在其中找到它们。Angular库也是如此。任何Angular应用程序的node_modules/@angular/core/目录都包含几个描述Angular各个部分的d.ts文件。这些d.ts文件如下图所示:更多Jerry原创文章在这里:《王子熙》:
