angular-cli 库创建辅助入口点

标签 angular angular-cli angular-library ng-packagr

我正在尝试在我的 Angular npm 包中创建一个我认为称为辅助入口点的东西。我想要下面两个入口

@scope/data-service
@scope/data-service/models

使用angular-cli生成基础包生成如下结构

scope
└───data-service
    │   karma.conf.js
    │   ng-package.json
    │   ng-package.prod.json
    │   package.json
    │   tsconfig.lib.json
    │   tsconfig.spec.json
    │   tslint.json
    │
    └───src
        │   public_api.ts
        │   test.ts
        │
        └───lib
                data-service.component.spec.ts
                data-service.component.ts
                data-service.module.ts
                data-service.service.spec.ts
                data-service.service.ts

基于 ng-packagr documentation您可以在名为 models 的数据服务下添加一个文件夹,然后将第二个 package.json 添加到该文件夹​​,但 ng-packagr 似乎使用与 angular-cli 略有不同的结构。理想情况下,我正在尝试对类似于 https://github.com/angular/angular/tree/master/packages/common 的结构进行建模但只要公开的是 @scope/data-service@scope/data-service/models 我会很高兴。

当我尝试创建类似于 ng-packager 推荐的结构时,我得到了

错误 TS6059:文件“C:/projects/data-service-app/projects/scope/data-service/models/src/index.ts”不在“rootDir”下“C:\projects\”数据服务应用\项目\范围\数据服务\src'。 “rootDir”应包含所有源文件。

当我将模型目录移动到 data-service\src 目录时,我的入口点是

@scope/data-service
@scope/data-service/src/models

如何删除辅助入口点上的 src?

在使用 angular-cli 时,创建具有辅助入口点的库的正确方法是什么?

最佳答案

感谢您的回复。这是我最终得到的解决方案,它全部围绕正确设置 index.ts 和 public_api.ts 文件展开

\---projects
    \---scope
        \---ngx-package
            |   karma.conf.js
            |   ng-package.json
            |   ng-package.prod.json
            |   package.json
            |   tsconfig.lib.json
            |   tsconfig.spec.json
            |   tslint.json
            |
            \---src
                |   public_api.ts
                |   test.ts
                |
                +---lib
                |       package-client-config.ts
                |       package-client.spec.ts
                |       package-client.ts
                |       package.module.ts
                |
                \---models
                    |   index.ts  (1)
                    |   package.json (2)
                    |   public_api.ts  (3)
                    |
                    \---src
                        |   public_api.ts  (4)
                        |
                        \---lib
                            |   model-a.ts
                            |   model-b.ts
                            |
                            \---hateoas
                                    hateoas.ts

好的,所以在上面的树中注意里面有数字的括号,它们对应于下面的文件。

1)/projects/scope/ngx-package/src/models/index.ts

// export what ./public_api exports so we can reference models like
// import { modelA } from './models'
export * from './public_api';

2)/projects/scope/ngx-package/src/models/package.json

{
  "ngPackage": {}
}

3)/projects/scope/ngx-package/src/models/public_api.ts

export * from './src/public_api';

4)/projects/scope/ngx-package/src/models/src/public_api.ts

export * from './lib/model-a';
export * from './lib/model-b';
export * from './lib/hateoas/hateoas';

使用此设置,您只需在一个地方维护导出列表。我尝试了很多其他变体,但都不起作用,这似乎没有问题。

关于angular-cli 库创建辅助入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802447/

相关文章:

angular - 如何更改 Angular 10 库构建结构

angular - 以 Angular 6 从 html 导出 Pdf

data-binding - 在 Angular 2 中加载第一页时设置 [(ngModel)] 的值

javascript - ngx-datatable 可配置分页参数

angular-cli - Angular 5 Service Workers 缓存刷新数据更新或插入

angular - 使用 Angular CLI 1.6.0 时 ng serve 使用什么服务器?

angular - 动态设置路由器 socket 名称

Angular 构建索引文件 : where does the injected style come from?

Angular 12 - 未捕获的类型错误 : Cannot read properties of undefined (reading 'ngModule' ) at isModuleWithProviders

angular - 让 Angular Material 在 Angular 库中工作