我正在尝试创建我认为是我的角度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时,使用辅助入口点创建库的正确方法是什么?
答案 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