执行命令行:ngrunstorefrontapp:server:productionError:Error:projects/storefrontapp/src/app/app.module.ts:33:30-errorTS2307:找不到模块“feature-libs/my-lib/src/public-api”或其相应的类型声明。33从“feature-libs/my-lib/src/public-api”导入{MyLibService};如果把报错信息中提到的第33行代码注释掉:Thereisnoprobleminbuild:说明错误是第33行代码引起的。本地storefrontappAngular应用使用配置文件tsconfig.app.json,扩展工作空间根目录下的tsconfig.json文件:在angular.json中,tsconfig.app.json作为storefrontapp的tsConfig配置文件:每当使用AngularCLI创建一个新的库时,库的名称会自动写入tsconfig.json的paths节点中:我们执行npmbuildtest-lib后,会在dist文件夹中生成相应的资源文件:然后我们按住ctrl再次点击,可以看到dist文件夹中test-lib的具体实现位置:同理,我们也可以根据Spartacus-resource的其他特征库设计,将test-lib的paths值指定为featurelibs中的文件,而不是dist文件夹。如果想让应用工作在服务端渲染,即SSR模式,需要在tsconfig.server.json中添加库地址:CSR:ngbuildstorefrontappSSR:ngrunstorefrontapp:serversuccessfullybuilt:Angular独立特性子库我不知道你是否注意到Angular(@angular)以某种方式分为不同的“部分”,例如:@angular/common@angular/core@angular/forms等。每个部分,如@angular/common有不同的导入子目录:@angular/common/http@angular/common/locale@angular/common/testingAngular支持开箱即用的多个子存储库。默认项目结构由一个“app”应用程序组成,它是一个常规的Angular项目,然后您添加额外的子存储库,它们是Angular库项目。有放置在库子文件夹中。一个Angular项目可以包含多个子库项目。每个子存储库项目都可以作为单独的npm包发布,因为它们有自己的package.json文件。npm支持一种叫做作用域包名的东西。这允许您将包命名为@angular/core,其中@angular是包的范围。您可以像这样将作用域库添加到当前的Angular项目中。nggeneratelibrary@my-scope/my-library从范围项目导入时,必须以scope为前缀。例如;从'@cool-lib/common'导入{CommonService};从'@cool-lib/feature-a'导入{FeatAComponent,FeatAService};从'@cool-lib/feature-b'导入{FeatBModule};在上面,名称@cool-lib是作用域,common是npm包的名称。使用作用域模块的两个优点:防止与其他包名称冲突,例如@cool-lib/animations不会与@angular/animations冲突将包组织成node_modules/@cool-lib更多Jerry原创文章,尽在:》王子熙”:
