用html5做網站百度經驗網站怎么制作
Rush 可以讓 JavaScript 開發(fā)者更輕松地同時構建、發(fā)布多個 NPM 包,即將多個包或項目放到一個大倉庫下管理。
僅需一次 NPM 安裝
僅需一步,Rush 便可以將你項目的所有依賴安裝到一個公共文件夾下,該文件夾并不像 “package.json” 一樣位于項目的根目錄(放到根目錄的設計可能存在幻影依賴的問題),相反,Rush 使用符號鏈接來為每個項目重新構建一個準確的 “node_modules” 文件。
關于 “shrinkwrap 文件”
依據(jù)不同的包管理工具,shrinkwrap 文件可能是 shrinkwrap.yaml, npm-shrinkwrap.json, package-lock.json, 或 yarn.lock.(一些包管理工具使用了 “l(fā)ock” 文件, 但該 “l(fā)ock” 與文件的訪問權限并無關系。在該文檔中,由于我們并不知道你使用了哪種包管理工具,因此使用 “shrinkwrap” 來泛指這些文件。
通常,包管理工具會在每個項目文件夾內創(chuàng)建 shrinkwrap 文件,但是在 Rush 中,整個項目共用存儲在 **common/config/rush" 目錄下的一個 shrinkwrap 文件,它會被存儲在 Git 內。 將所有依賴信息整合到單獨一個 shrinkwrap 內有一些優(yōu)勢,例如減少沖突、方便查看 diff, 還能提高安裝速度。
ensureConsistentVersions 依賴版本統(tǒng)一
我們推薦將 rush.json 內的 ensureConsistentVersions 設定為 true,它會使得 Rush 在執(zhí)行操作包的指令時前執(zhí)行 rush check。
該指令會去檢查每個項目的 package.json 文件并保證所有的依賴都是同一個版本,該配置可以避免版本不一致導致的問題,因此推薦你打開。
npm分身
有時 node_modules 的數(shù)據(jù)結構會強制安裝同一個包的兩個相同版本的。這就相當于一個npm包有了分身。如B、C都依賴F1,E、F都依賴于F2,那么 node_modules 的數(shù)據(jù)結構有兩種方式:要么安裝兩次F1(B、C node_modules下),一次F2(一級node_modules目錄下),要么安裝兩次F2(E、F node_modules下),一次F1(一級node_modules目錄下。
而 pnpm 解決了該問題。
幻影依賴
某個項目下引用了一個包,這個包不在其node_modules目錄下,這種情況就是出現(xiàn)了幻影依賴。普通項目如果出現(xiàn)dependencies下的某個npm包依賴了其它包,則會自動在node_modules下被安裝,這樣項目中是可以直接引用這個其它包的,實際上在dependencies并沒有這個其它包的聲明,這樣就出現(xiàn)了幻影依賴。而rush解決了這個問題。
而 rush 的符號鏈接解決了這個問題。
不建議在根目錄安裝npm包
在根目錄放package.json且有依賴,執(zhí)行npm i 后會產生node_modules目錄,這樣可能會造成幻影依賴。
指定rush的包管理器
基于幻影依賴和npm包分身,可以指定使用 pnpm 包管理器。
常用命令
# 安裝所有項目依賴。會更新公共的 shrinkwrap 文件。
$ rush update# 與rush update 不同點是 rush install 不會更新任何文件,相反,如果存在過失的數(shù)據(jù),則會在 PR 上報錯,并提示你執(zhí)行 rush update 或者提示你 commit 其結果。
$ rush install# 構建變動的項目。
$ rush build# 清空并構建所有項目。會默認查找每個項目的package.json的build命令并執(zhí)行。
$ rush rebuild
rush update
當 package.json 文件發(fā)生變化時,請務必運行 rush update, 換句話說:
- 當從 git 上拉取新的更改(例如 git pull)后。
- 當項目內 package.json 文件被手動修改后。
- 當 common/config 目錄下可能影響版本的文件(例如 pnpmfile.js, common-versions.json 等)被修改后。
rush update 內做了些什么:
- Rush 檢查或應用各種可能會改變 common/config 內文件的策略。
- Rush 會將所有項目內的 package.json 文件與倉庫的公共 shrinkwrap 文件進行比較來檢查是否有效。
-
若無效,則包管理工具會更新 shrinkwrap 文件。
-
無論如何,包管理工具都會將所有依賴安裝到 common/temp/node_modules 目錄下。
- 最后,Rush 會給每個項目下構建一個 node_modules 文件夾,該文件夾下內容通過符合鏈接到 common/temp/node_modules. (該操作等同于 rush link)