在使用angular的過程中,我們希望將一些公共的元件等剝離到一個單獨的庫中,然後供我們在其它的angular專案中直接匯入。
本文將展示如何初始化並整合測試一個angular庫。
angular cli
首先我們需要確認angular的版本,比如我當前計劃初始化適用於angular18版本的庫,則需要在全域性先安裝18版本的angular-cli,然後使用 ng version
來進行版本確認:
命令如下:
npm install -g @angular/cli@18.0.0
ng version
全域性展示如下:
(base) panjie@panjiedeMac-Studio ~ % npm install -g @angular/cli@18.0.0
added 22 packages, removed 93 packages, and changed 203 packages in 17s
40 packages are looking for funding
run `npm fund` for details
(base) panjie@panjiedeMac-Studio ~ % ng version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 18.0.0
此時我們便擁有了一個18版本的全域性cli,使用它可以快速的建立18版本的angular專案。
建立專案
在建立angular庫前,我們需要建立一個用於整合測試的專案,否則我們只能夠對庫中的元件進行單元測試。而傳統的npm link
的方法,並不適用於測試angular庫(會報錯)。
在自己的喜歡的資料夾處,建立angular專案:
ng new angular18
選擇專案使用的stylesheet以及是否啟用SSR後繼續。
建立庫
比如此時我想建立一個名稱為@yunzhi/ng-theme
的庫,則可以直接使用關鍵字來建立。
首先我們先進入到angular18專案中,然後再直接建立庫的命令:
(base) panjie@panjiedeMac-Studio ng % cd angular18
(base) panjie@panjiedeMac-Studio angular18 % ng g lib @yunzhi/ng-theme
此時將自動在angular18下建立projects資料夾:
├── projects
│ └── yunzhi
│ └── ng-theme
測試庫
在進行單元測試時,可以使用ng t @yunzhi/ng-theme
,在進行整合測試時,可以直接在當前專案中引用庫中的在pubilc-api.ts
檔案中丟擲的元素。
釋出庫
ng build @yunzhi/ng-theme
然後進入相應的資料夾npm publish
即可。
注意點
在整合測試中引用庫中的元素時,必須要import xxx/pubilc-api.ts
,不能夠直接import
相關的檔案!因為只有xxx/pubilc-api.ts
丟擲的,才可以在庫釋出後被第三方成功引用到。