欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用ng-packagr打包Angular的方法示例

 更新時(shí)間:2018年09月21日 10:25:17   作者:cipchk  
這篇文章主要介紹了使用ng-packagr打包Angular的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

寫(xiě)在前面

為了讓 Angular 類(lèi)庫(kù)應(yīng)用范圍更自由,Angular 提出一套打包格式建議名曰:Angular Package Format,包括 FESM2015、FESM5、UMD、ESM2015、ESM5、ES2015 格式,不同格式可以在不同的環(huán)境(Angular Cli、Webpack、SystemJS等)中使用。

傳統(tǒng)方式需要對(duì)這些格式逐一打包,一個(gè)示例打包腳本寫(xiě)法。這種寫(xiě)法只能針對(duì)不同項(xiàng)目的配置,而且除非你了解這些格式的本質(zhì)否則很難維護(hù);后來(lái)社區(qū)根據(jù) APF 規(guī)范實(shí)現(xiàn)了類(lèi)庫(kù) ng-packagr,通過(guò)簡(jiǎn)單的配置可以將你的類(lèi)庫(kù)打包成 APF 規(guī)范格式。

至 V6 以后 Angular Cli 也基于 ng-packagr 實(shí)現(xiàn)了另一個(gè) @angular-devkit/build-ng-packagr 應(yīng)用構(gòu)建器。

如何使用

既然 ng-packagr 被 Angular Cli 內(nèi)置,這讓我們進(jìn)一步簡(jiǎn)化了生產(chǎn)一個(gè) APF 規(guī)范格式的類(lèi)庫(kù)的成本。在 Angualr Cli 里使用 ng g library 來(lái)創(chuàng)建一個(gè)類(lèi)庫(kù)模板,例如在一個(gè)新的 Angular 應(yīng)用里執(zhí)行:

ng g library <library name>

而打包,則:

ng build <library name>

最終,將生成的 dist/<libary name> 目錄下文件上傳相應(yīng)包管理服務(wù)器(例如:npm)提供給其他 人使用。

配置說(shuō)明

由 Angular Cli 生成的類(lèi)庫(kù)模板大部分內(nèi)容同 Angular 應(yīng)用一樣,只是多了一個(gè) ng-package.json 的配置文件(對(duì)于生產(chǎn)環(huán)境是 ng-package.prod.json),它是專(zhuān)門(mén)針對(duì) ng-packagr 的一個(gè)配置文件,如同 angular.json 一般也是基于 JSON Schema 格式,因此可以通過(guò)訪(fǎng)問(wèn)ng-package.schema.json 了解所有細(xì)節(jié),以下描述一些重點(diǎn)項(xiàng)。

whitelistedNonPeerDependencies

ng-packagr 默認(rèn)會(huì)根據(jù) package.json 的 peerDependencies 節(jié)點(diǎn)清單來(lái)決定類(lèi)庫(kù)所需要第三方依賴(lài)包,這些依賴(lài)包是不會(huì)被打包至類(lèi)庫(kù)。

然而,所依賴(lài)包不存在 peerDependencies 節(jié)點(diǎn)里時(shí)(當(dāng)然建議需要依賴(lài)的項(xiàng)應(yīng)該在里面),就需要該屬性的配置。

lib/entryFile

指定入口文件。

lib/umdModuleIds

UMD 格式采用 rollup 打包,當(dāng)類(lèi)庫(kù)需要引用一些無(wú)法猜出正確 UMD 標(biāo)識(shí)符時(shí),就需要你手動(dòng)映射這些類(lèi)庫(kù)的標(biāo)識(shí)。

"umdModuleIds": {
  "lodash": "_"
}

angular.json

Angular Cli 配置文件 angular.json 內(nèi)會(huì)增加一個(gè)以 <libary name> 命名的構(gòu)建配置,絕大多數(shù)配置性同普通 Angular 應(yīng)用如出一轍,唯一不同的是 builder 節(jié)點(diǎn)為:

"builder": "@angular-devkit/build-ng-packagr:build"

次級(jí)入口

有時(shí)候一個(gè)類(lèi)庫(kù)可能會(huì)包含著多個(gè)二次入口,就像 @angular/core 類(lèi)庫(kù)包含著一個(gè) @angular/core/testing 模塊,它只是運(yùn)用于測(cè)試,因此并不希望在項(xiàng)目中引入 @angular/core 時(shí)也包含測(cè)試代碼,但同時(shí)二者又是同一個(gè)功能性時(shí),這種次級(jí)導(dǎo)入顯得非常重要。

另一種像 ngx-bootstrap、@angular/cdk/ally 等都提供次級(jí)模塊的導(dǎo)入,可以更好的優(yōu)化體積。

不論出于何種目的,都可以通過(guò) Angular Cli 簡(jiǎn)單的文件組織進(jìn)一步打包出主、次級(jí)分明的類(lèi)庫(kù)。

ng g library 生成的結(jié)構(gòu)大概如下:

<libary name>
├── src
|  ├── public_api.ts
|  └── lib/*.ts
├── ng-package.json
├── ng-package.prod.json
├── package.json
├── tsconfig.lib.json
└── tsconfig.spec.json
當(dāng)根目錄下包含 README.md、LICENSE 時(shí)會(huì)自動(dòng)被復(fù)制到 dist 目錄中,Npm 規(guī)定必須包含 README.md 文件,否則訪(fǎng)問(wèn)已發(fā)布類(lèi)庫(kù)頁(yè)時(shí)會(huì)有未找到描述文件錯(cuò)誤提示。

若想創(chuàng)建一個(gè) <libary name>/testing 的次級(jí)入口,只需要在 <libary name> 根目錄下創(chuàng)建一個(gè) testing 目錄:

<libary name>
├── src
|  ├── public_api.ts
|  └── lib/*.ts
├── ng-package.json
├── ng-package.prod.json
├── package.json
├── tsconfig.lib.json
├── tsconfig.spec.json
└── testing
  ├── src
  |  ├── public_api.ts
  |  └── *.ts
  └── package.json

核心是需要提供一個(gè) package.json 文件,而且內(nèi)容簡(jiǎn)單到姥姥家。

{
  "ngPackage": {}
}

最后,依然使用 ng build <libary name>,會(huì)產(chǎn)生一個(gè)次級(jí)導(dǎo)入模塊。

小結(jié)

至此,基本上利用 Angular Cli 可以快速的構(gòu)建一個(gè)可發(fā)布于 Npm Angular 類(lèi)庫(kù),更復(fù)雜的可以構(gòu)建像 ngx-bootstrap、@angular/cdk/* 類(lèi)庫(kù)。

自定義構(gòu)建

Angular Cli 雖然提供非常便利的環(huán)境,但是對(duì)于一些復(fù)雜環(huán)境像 Delon 類(lèi)庫(kù)(ng-alain基建系列類(lèi)庫(kù))包含著多個(gè)類(lèi)庫(kù)、類(lèi)庫(kù)又包含多個(gè)次級(jí)導(dǎo)入時(shí),Angular Cli 會(huì)顯得有點(diǎn)啰嗦,特別是對(duì)每個(gè)類(lèi)庫(kù)的 angular.json 配置。其實(shí) @angular-devkit/build-ng-packagr 非常簡(jiǎn)單,如果將取進(jìn)一步簡(jiǎn)化,整個(gè)實(shí)現(xiàn)差不多相當(dāng)于:

const path = require('path');
const ngPackage = require('ng-packagr');

const target = path.resolve(__dirname, './projects/<libary name>');

ngPackage
 .ngPackagr()
 .forProject(path.resolve(target, `ng-package.prod.json`))
 .withTsConfig(path.resolve(target, 'tsconfig.lib.json'))
 .build()
 .then(() => {
   // 構(gòu)建完成后干點(diǎn)事
 });

將上面的代碼放到 ./build.js,執(zhí)行:

node scripts/build.js

其結(jié)果完成是等價(jià)。

build() 返回的是一個(gè) Promise 對(duì)象,意味著可以確保構(gòu)建開(kāi)始前和結(jié)束后做一點(diǎn)額外的事。

總結(jié)

ng-packagr 極大簡(jiǎn)化 Angular 類(lèi)庫(kù)被打包出一個(gè) APF 規(guī)范建議,雖然它以 ng- 開(kāi)頭,但本質(zhì)上并不一定非要在 Angular 中運(yùn)用,也可以使用在 React、VUE。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • angular.js中解決跨域問(wèn)題的三種方式

    angular.js中解決跨域問(wèn)題的三種方式

    跨域,前端開(kāi)發(fā)中經(jīng)常遇到的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于angular.js中解決跨域問(wèn)題的三種方式,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • AngularJs分頁(yè)插件使用詳解

    AngularJs分頁(yè)插件使用詳解

    這篇文章主要為大家詳細(xì)介紹了AngularJs分頁(yè)插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • angular內(nèi)置provider之$compileProvider詳解

    angular內(nèi)置provider之$compileProvider詳解

    下面小編就為大家?guī)?lái)一篇angular內(nèi)置provider之$compileProvider詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 解決angularjs前后端分離調(diào)用接口傳遞中文時(shí)中文亂碼的問(wèn)題

    解決angularjs前后端分離調(diào)用接口傳遞中文時(shí)中文亂碼的問(wèn)題

    今天小編就為大家分享一篇解決angularjs前后端分離調(diào)用接口傳遞中文時(shí)中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Angular2入門(mén)--架構(gòu)總覽

    Angular2入門(mén)--架構(gòu)總覽

    本文主要介紹了Angular2的架構(gòu)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • Angular 向組件傳遞模板的兩種方法

    Angular 向組件傳遞模板的兩種方法

    這篇文章主要介紹了Angular 向組件傳遞模板的兩種方法,第一種方式<ng-content>第二種方式是NgTemplateOutlet 指令及各種使用方式介紹,需要的朋友可以參考下
    2018-02-02
  • angular實(shí)現(xiàn)導(dǎo)航菜單切換

    angular實(shí)現(xiàn)導(dǎo)航菜單切換

    這篇文章主要為大家詳細(xì)介紹了angular實(shí)現(xiàn)導(dǎo)航菜單切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • angularjs實(shí)現(xiàn)的購(gòu)物金額計(jì)算工具示例

    angularjs實(shí)現(xiàn)的購(gòu)物金額計(jì)算工具示例

    這篇文章主要介紹了angularjs實(shí)現(xiàn)的購(gòu)物金額計(jì)算工具,涉及AngularJS事件監(jiān)聽(tīng)、數(shù)值計(jì)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • ng-repeat指令在迭代對(duì)象時(shí)的去重方法

    ng-repeat指令在迭代對(duì)象時(shí)的去重方法

    今天小編就為大家分享一篇ng-repeat指令在迭代對(duì)象時(shí)的去重方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • AngularJS入門(mén)教程之模塊化操作用法示例

    AngularJS入門(mén)教程之模塊化操作用法示例

    這篇文章主要介紹了AngularJS模塊化操作用法,結(jié)合實(shí)例形式分析了AngularJS基于模塊化操作避免命名沖突的相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11

最新評(píng)論