npm run 脚本背后的事情
npm run build:mylib
npm run 執(zhí)行的目標(biāo) build:mylib, 定義在 package.json 里:
實(shí)際執(zhí)行的命令是:yarn --cwd feature-libs/my-lib && ng build my-lib --configuration production
ng build:把 Angular 應(yīng)用編譯到給定輸出路徑下名為 dist/ 的輸出目錄中。此命令必須在工作空間目錄下執(zhí)行。
當(dāng)用于構(gòu)建庫時,將調(diào)用其他構(gòu)建器,并且僅應(yīng)用 ts-config、configuration 和 watch 選項(xiàng)。
使用 CLI 創(chuàng)建項(xiàng)目時,默認(rèn)情況下會創(chuàng)建 “production” 配置,并且可以通過指定 --configuration=“production” 或 --prod 選項(xiàng)來使用該配置。
如果遇到錯誤消息:
[error] Error: Unable to write a reference to UrlPipe in C:/Code/SPA/mySPA/spartacus/projects/core/src/routing/configurable-routes/url-translation/url.pipe.ts from C:/Code/SPA/mySPA/spartacus/projects/core/src/routing/configurable-routes/url-translation/url.module.ts
at ReferenceEmitter.emit (C:\Code\SPA\mySPA\spartacus\node_modules@angular\compiler-cli\src\ngtsc\imports\src\emitter.js:85:19)
my-lib 為什么和 core 文件夾下的 url.pipe.ts 有關(guān)聯(lián)?
創(chuàng)建一個空的 test-lib, 然后 ng build 之,看有無同樣的錯誤。
沒有任何問題。
我發(fā)現(xiàn)只要當(dāng)我 import ICON_TYPE 之后,就會出現(xiàn)這個錯誤:
當(dāng)我注釋掉上圖第2行代碼之后,build 錯誤消失:
查看 Spartacus 其他 library 的 ng-package.json 文件,其 lib 區(qū)域有一個指向 @spartacus/storefront 的引用:
在新建的 test-lib service 里添加 ICON_TYPE 的引用:
也立即出錯了:
經(jīng)過研究發(fā)現(xiàn),在 Angular 庫工程文件夾下面的 tsconfig.lib.json 文件內(nèi),添加對 @Spartacus/core 和 @Spartacus/storefront 的引用即可解決問題:
成功 build 通過:
很多 JavaScript 庫,比如 jQuery、Jasmine 測試庫和 Angular,會通過新的特性和語法來擴(kuò)展 JavaScript 環(huán)境。 而 TypeScript 編譯器并不能原生的識別它們。 當(dāng)編譯器不能識別時,它就會拋出一個錯誤。
可以使用TypeScript 類型定義文件 —— .d.ts 文件 —— 來告訴編譯器你要加載的庫的類型定義。
TypeScript 敏感的編輯器借助這些定義文件來顯示這些庫中各個特性的類型定義。
很多庫在自己的 npm 包中都包含了它們的類型定義文件,TypeScript 編譯器和編輯器都能找到它們。Angular 庫也是這樣的。 任何 Angular 應(yīng)用程序的 node_modules/@angular/core/ 目錄下,都包含幾個 d.ts 文件,它們描述了 Angular 的各個部分。
這些 d.ts 文件如下圖所示:
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的npm run 脚本背后的事情的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学中常用符号
- 下一篇: 使用脚本进行 SAP Spartacus