返回
近期在 Angular 项目开发过程中,有个需求,同样的界面需要在两个不同的项目用到(用户端、管理端)。于是,大家决定增加一个 Git 仓库,用于放置多项目复用的组件!
背景:由于该项目有很多权限限制,发布 npm 包需要走很多流程,所以,下面的方法尝试中,会使用优先不发包的方式!
思路:
以下操作是在第三方库执行的操作
git subtree add --prefix=reuse https://github.com/Heyff12/reuseSon.git master --squash
需要先把当前修改提交到本项目(第三方项目),再执行下面的 subtree 推送
git subtree push --prefix=reuse https://github.com/Heyff12/reuseSon.git master
这个提交会更新 subtree 的库的代码; subtree 库需要 pull 获取最新改动
git subtree pull --prefix=reuse https://github.com/Heyff12/reuseSon.git master --squash
文件 tsconfig.app.json
"include": [
"reuse/src/app/components/**/*.ts",
],
"exclude": [
"reuse/src/app/components/**/*.spec.ts"
]
思路:
备注: 包的名字以@开头时,比如 @hey_ff/testbutton,发布时,需要增加属性才能发包成功
npm publish --access public
npm install @hey_ff/testbutton
文件 app.module.ts
import {TheButtonComponent} from '@hey_ff/testbutton/the-button/the-button.component'
@NgModule({
declarations: [
AppComponent,TheButtonComponent
],
文件 tsconfig.app.json
"include": [
"node_modules/@hey_ff/testbutton/the-button/**/*.ts",
],
"exclude": [
"node_modules/@hey_ff/testbutton/the-button/**/*.spec.ts",
]
跟第一种方式比起来:
在前两种方式对比下,发布包也依然没有让使用变得更简洁,所以继续尝试不发包的方式。
"btn": "file:./reuse/src/app/components",
import {TheButtonComponent} from 'btn'
@NgModule({
declarations: [
AppComponent,TheButtonComponent
],
"include": [
"reuse/src/app/components/**/*.ts",
],
"exclude": [
"reuse/src/app/components/**/*.spec.ts"
]
上述方式,既然通过配置 package.json 实现,那依据 package.json 的功能,还可以不用拉取公用组件的代码实现!
https://github.com/Heyff12/reuseBtn 这个库,只有公用组件的代码
"btnUrl": "https://github.com/Heyff12/reuseBtn",
import {TheButtonComponent} from 'btnUrl'
@NgModule({
declarations: [
AppComponent,TheButtonComponent
],
"include": [
"node_modules/btnUrl/**/*.ts",
],
"exclude": [
"node_modules/btnUrl/**/*.spec.ts",
]
基于目前的 4 种方式,只是优化了引入公用组件库的方式,实际使用依然繁琐,就当做是对于 package.json 的引用探索好了~
使用的繁琐,归根结底,就是由于引入的公用组件代码没有经过编译!!!
通过再次查看 angular 文档,下面着重进行制定代码的编译实现!
1.创建工作区
ng new xxxx --create-application=false
xxxx 为项目名
2.进入项目新建文件夹
cd xxxx
ng g library my-lib --prefix=ml
3.编译 ng build my-lib --prod
4.编译后会生成 dist 文件,进入 dist 文件 cd dist cd my-lib
5.打包
npm pack
6.发布 npm publish --access public
import { MyLibModule } from '@hey_ff/my-lib';
@NgModule({
declarations: [AppComponent, TheButtonComponent],
imports: [BrowserModule, AppRoutingModule, MyLibModule],
1、在公用组件项目,把第一步的 打包好的文件 dist/my-lib push 到指定分支
git subtree push --prefix dist/my-lib origin reuse
2、在第三方项目 通过 指定分支路径 安装上面的打包好的文件
"reuse": "git@github.com:Heyff12/angularPackage.git#reuse",
3、 在第三方项目,正常使用
import { MyLibModule } from 'reuse';
@NgModule({
declarations: [AppComponent, TheButtonComponent],
imports: [BrowserModule, AppRoutingModule, MyLibModule],
上述实现过程,看完后感觉很扭曲。