angluar-cli库创建辅助入口点

时间:2018-06-11 16:40:00

标签: angular angular-cli ng-packagr

我正在尝试创建我认为是我的角度npm pacakge的第二个入口点。我想要以下两个切入点

@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似乎使用与角度略有不同的结构-cli。理想情况下,我尝试对类似于https://github.com/angular/angular/tree/master/packages/common的结构进行建模,但只要公开的公众是@scope/data-service@scope/data-service/models,我就会很高兴。

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

error TS6059: File 'C:/projects/data-service-app/projects/scope/data-service/models/src/index.ts' is not under 'rootDir' 'C:\projects\data-service-app\projects\scope\data-service\src'. 'rootDir' is expected to contain all source files.

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

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

如何摆脱辅助入口点上的src?

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

3 个答案:

答案 0 :(得分:4)

感谢您的回复。这是我最终得到的解决方案,全部围绕正确设置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';

使用此设置,您只需要将出口清单维护在一个地方。我尝试了许多其他变种,但都没有用,这似乎没有问题。

答案 1 :(得分:2)

对于ng-packagr,恐怕这不是一件容易的事。

对于您尝试打​​包的每个“项目”,ng-packagr都会自动检测所有辅助软件包。

ng-packagr 忽略 Id个辅助软件包文件,它将使用主软件包随附的tsconfig文件。

然后,在编译之前,使用主数据库的tsconfig为主数据库和所有辅助数据库加载TS程序。

  

以这种方式完成操作,以便打包程序可以解析代码并创建一个依赖关系树,该树将告诉它首先渲染哪个包,第二个渲染等等。   ,这也意味着ng-packagr并不假设辅助软件包始终依赖于主软件包,这可能是另一种方式,并且有效...

现在,到目前为止,一切都应该没问题,没有错误等...为所有程序包创建了一个TS程序,但是没有发出任何东西,所以一切都很好。

您看到的错误出现在编译阶段,在该阶段编译器尝试发出文件并引发。这是ng-packagr记录“通过ngc编译TypeScript源代码”

这时,打字稿对在根目录之外的文件的引用感到不满意。

一种解决方案是更新black PENS Assorted Bit Set 10Pcs Hollow blocks 10-16mm Cd3 Hollow blocks 16-23mm Cd3 Hollow blocks 5-10mm Cd3 Hollow blocks To 1-5mm Cd3 \b[^\d]+\b 中的 update waitingvisitor upd set position = a.row_number FROM ( SELECT "queueId", row_number() over(order by "timeJoined") from waitingvisitor ORDER BY "timeJoined" ) as a where upd."id" = a."id"; 属性,使其指向所构建的每个程序包的输出目录。因此,如果刚刚编译了程序包A,我们将更改/创建指向输出库的tsconfig.lib.json记录,该记录将不被视为TS源...因此没有错误。

我已经测试了它可以正常工作,但是很遗憾,它需要使用paths源代码或者像我一样使用自定义的角度devkit构建器来做一些工作...

有了它,您可以在每次编译完成后立即替换tsconfig,因此下一次编译将引用生成的输出而不是源代码。

由于ng-packagr基于依赖关系图构建软件包,因此我们可以放心地认为这是可行的。

答案 2 :(得分:0)

  

辅助入口点的文件夹布局示例

     

您要做的就是创建一个package.json文件并将其放在您的位置   希望创建一个辅助入口点。一种可以做到这一点的方法   是通过模仿以下示例的文件夹结构来实现的:   除了主要入口点以外,还有一个测试入口点。

my_package
├── src
|   ├── public_api.ts
|   └── *.ts
├── ng-package.json
├── package.json
└── testing
    ├── src
    |   ├── public_api.ts
    |   └── *.ts
    └── package.json
     

my_package/testing/package.json的内容可以很简单:

{
  "ngPackage": {}
}
     

不,那不是错字。不需要名称。不需要版本。   ng-packagr完全为您处理!构建后,主要条目   点由import {..} from '@my/library'导入,并且   具有import {..} from '@my/library/testing'

的辅助入口点

来源-https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md