tip
npm i -g @angular/cli@15.2.8
使用 Angular 脚手架生成一个组件库架子
生成一个空的项目
ng new ng-darui --create-application=false生成一个 library 项目
ng g lib ng-darui --prefix=dar删除多余组件和文件,并移动文件,最终目录是这样
├─ng-darui
| ├─ng-package.json
| ├─package.json
| ├─public-api.ts
| ├─README.md
| ├─tsconfig.lib.json
| ├─tsconfig.lib.prod.json
| ├─tsconfig.spec.json
修改配置文件
angular.json- "sourceRoot": "projects/ng-darui/src",
+ "sourceRoot": "projects/ng-darui",ng-package.json- "entryFile": "src/public-api.ts"
+ "entryFile": "public-api.ts"tsconfig.json"paths": {
- "ng-darui": [
- "dist/ng-darui"
+ "ng-darui/*": [
+ "projects/ng-darui/*"
]
},
手动安装 Docgeni
下载依赖包
npm i @docgeni/cli @docgeni/template -D添加
.docgenirc.js配置.docgenirc.js/**
* @type {import('@docgeni/core').DocgeniConfig}
*/
module.exports = {
mode: "lite",
title: "ng-darui",
description: "",
docsDir: "docs",
navs: [
null,
{
title: "Components",
path: "components",
lib: "ng-darui",
locales: {},
},
],
libs: [
{
name: "ng-darui",
abbrName: "dar",
rootDir: "projects/ng-darui",
include: [""],
apiMode: "automatic",
categories: [
{
id: "general",
title: "通用",
locales: {
"en-us": {
title: "General",
},
},
},
],
},
],
};添加概述文档(没有它,项目起不来)
mkdir docs && echo 'Hello Docgeni!' > docs/getting-started.mdtsconfig.json中添加/修改pathtsconfig.json{
"compilerOptions": {
"paths": {
"ng-darui/*": ["projects/ng-darui/*"]
}
}
}
添加组件
通过 Angular 脚手架添加组件
之前修改了 angular.json 中的 sourceRoot 之后,默认生成时在
lib目录下面,所以需要返回一个层级ng g m ../button --project=ng-darui
ng g c ../button --project=ng-darui --module=button修改组件文件
修改
button.module.tsbutton.module.ts@NgModule({
declarations: [
ButtonComponent
],
imports: [
CommonModule
],
+ exports: [
+ ButtonComponent
+ ]
})
export class ButtonModule { }在 button 文件夹下面添加 index.ts
button > index.tsexport * from "./button.component";
export * from "./button.module";在
public-api.ts中添加public-api.tsexport * from "./button";
添加展示文档和 example 组件
先展示最终的目录情况
├─doc
| └en-us.md
├─examples
| ├─basic
| | ├─basic.component.css
| | ├─basic.component.html
| | └basic.component.ts
├─button.component.css
├─button.component.html
├─button.component.spec.ts
├─button.component.ts
├─button.module.ts
├─index.ts
basic 组件就是展示的 Demo 框框里面的东西
basic.component.html<dar-button></dar-button>basic 组件用的是 Angular 的独立组件
basic.component.tsimport { CommonModule } from "@angular/common";
import { Component } from "@angular/core";
import { ButtonModule } from "ng-darui/button";
@Component({
selector: "dar-button-basic-example",
templateUrl: "./basic.component.html",
styleUrls: ["./basic.component.css"],
standalone: true,
imports: [CommonModule, ButtonModule],
})
export class DarButtonBasicExampleComponent {
constructor() {}
}给 Button 组件添加 Api
button.component.ts
/**
* Button Type: `'primary' | 'secondary' | 'danger'`
* @description 按钮类型
* @default primary
* @type 'primary' | 'secondary' | 'danger'
*/
@Input('type') type: string = 'primary'
en-us.md就是组件的概述infocategory: 这个组件在哪个类别里面,就是之前在
.docgenirc.js文件中定义的name: 组件的名字,如果改成 aaa,那么 example 的 name 就应该是 dar-aaa-basic-example
order: 在类别中的排序
<example name="dar-button-basic-example" />是特定的 Demo 组件<examples />是全部的 Demo 组件都展示en-us.md---
category: general
title: Button
name: button
order: 1
---
这是单个
<example name="dar-button-basic-example" />
这是全部
<examples />
起服务
添加脚本
package.json"scripts": {
"start:docs": "docgeni serve --port 4600",
"build:docs": "docgeni build"
},.gitignore 忽略文件
起服务会生成临时文件,需要在.gitignore 中忽略这些临时文件
.docgeni/site