前言
很长一段时间来,公司一直在使用angularjs,后来在做技术造型时,决定升级使用angular,这里就不讨论过程了,只说现状。在使用angular的背景下,有好几个项目就要做技术升级改造,于是乎,名称情况就出现了,一部分基础的组件可以复用了,但是怎么复用呢,一开始想,要不就直接copy代码,多简单的,可是复制了两段代码后就不高兴了,太麻烦了,而且吧,一点也不高大上,如果要做改动,那岂不是很多地方都要改,想想就DT。
好,那就做个公共库吧,说干就干肯定不是我的风格啊,先分析分析再说,万一开工了发现有其它问题岂不是白瞎了。下面就逐步描述这一过程,过程不一定适合其它公司,但我们公司内部目前还没有发现问题,正在一步步前进。
如果你发现文章内容过于简单,就可以从读到这个位置开始关闭博客了。
方案探索
既然是公共库,肯定是要很方便的开发、调试,并且容易被各个项目引用。另外,组件能够方便地进行更新、发布。
- 针对第一个问题,这个组件库一定是发布了、独立的项目,才能被其它项目引用
- 针对第二个问题,需要一个仓库来管理代码,并且需要支持CI\CD
好了,考虑到公司目前使用 npm 作为包管理工具,毫无疑问,组件库要被其它项目使用,也只有发布到npm上了。目前还没有使用npm私库,因此暂时定为发布到npm公有库上。第一个问题解决了,完美。
公司内部现在使用Git作为版本管理工具,使用jenkins作为持续集成工具,组件库只需要新建一个项目就完成了,完美。
一初看起来都是那么的理所当然,那组件库是不是就可以动手了呢。好像没什么问题,于是,开干,先建立项目,叫啥各呢,一来就想到pandora,这个名字好,可是没有自己特点,那好吧,加上前缀:windora。仓库有了,那就先开发一个组件: hello world,简单点来说就叫hello吧。简单,三分钟完事。准备脚本,上jenkins。一初看起来还顺利。
开始使用
赶紧的,拿一个项目来使用hello组件。
- 在目前项目中引用
import {HelloModule} from './windora/hello'
@NgModule({
imports:[ HelloModule ]
})
export class AppModule { }
好吧,没有报错,可是打包的时候就麻烦了,按照打包配置,来自node_modules下的包被排除了,windora的包还没编译呢,然后又回去编译,导出。折腾了好些时间,总算是弄好了,打造自己的组件好像真的挺简单的。
按照angluar框架设计,好像很容易就打造了一个模块,有了helloModule,就可以有WorldModule…这不是我想西的生活
问题来了,他们都是这么弄的吗?于是去看了一下,发现了一个叫 ng-packagr的包,看了一下描述:Transpile your libraries to Angular Package Format。。原来有现成的,算了算了,hello也不要了,我要重新开始。下一篇文章。。。