亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

什么時候不能在 Node.js 中使用 Lock Files

2024-05-06 16:52:38
字體:
來源:轉載
供稿:網友

快速摘要

如果你開發像 Web 服務器之類的程序,那么 lock file 是非常有用的。但是如果將庫或 CLI 發布到 npm,則永遠不要發布 lock file。因為如果你使用它,則意味著你和你的用戶可能在使用不同版本的依賴項。
什么是Lock File?

lock file 描述了整個依賴關系樹,它在創建時被解析,包括具有特定版本的嵌套依賴關系。在 npm 名為 package-lock.json ,在 yarn 中名為 yarn.lock。在這兩個npm和yarn它們被放置旁邊你的package.json。
package-lock.json 的內容應該是這樣:

{"name": "lockfile-demo","version": "1.0.0","lockfileVersion": 1,"requires": true,"dependencies": {"ansi-styles": {"version": "3.2.1","resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz","integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==","requires": {"color-convert": "^1.9.0"}},"chalk": {"version": "2.4.2","resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz","integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==","requires": {"ansi-styles": "^3.2.1","escape-string-regexp": "^1.0.5","supports-color": "^5.3.0"}}}}

yarn.lock 的格式不同,但也包含類似的信息:

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1ansi-styles@^3.2.1:version "3.2.1"resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==dependencies:color-convert "^1.9.0"chalk@^2.4.2:version "2.4.2"resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==dependencies:ansi-styles "^3.2.1"escape-string-regexp "^1.0.5"supports-color "^5.3.0"

 

兩者都包含一些重要的信息:

  • 安裝的每個依賴項的實際版本
  • 每個依賴項的依賴項
  • 已解決的軟件包中用校驗和驗證軟件包的完整性

既然 lock file 中已經列出了所有的依賴項,拿為什么還要將它們寫在 package.json 中呢?為什么我們需要兩個文件?

package.json vs. Lock File

package.json 中 dependencies 字段顯示你的項目應該安裝的依賴項,但不顯示這些依賴項的依賴項。依賴項可以指定精確版本或 semver 范圍。對于 semver 范圍,npm 或 yarn 將h會選擇最適合的版本。

這意味著,如果在發布新版本時多次運行 npm install ,有可能會得到相同版本的依賴項。例如用 npm install twilio 安裝 twilio 這樣的依賴項,那么 package.json 中的依賴項可能會存在類似于這樣的條目:

{"dependencies": {"twilio": "^3.30.3"}}

如果你查閱 npm 網站上的 semver 文檔,就會看到 ^ 意味著任何大于 3.30.3 的版本和小于 4.0.0 都是有效版本。因此,如果在發布新版本時你沒有鎖定文件,npm install 或 yarn install 會自動安裝一個,你的 package.json 將不會被更新。但是 lock file 的內容會有所不同。

如果 npm 或 yarn 找到它們各自的 lock file,將使用它們代替模塊安裝。這對于持續集成(CI)等情況尤其有用。對于此這種場景,你可以針對相應的包管理器使用特殊命令或標志:

npm ci # will install exactly what's in the package-lock.jsonyarn install --frozen-lock-file # will install exactly what's in yarn.lock without updating it

當你在構建 Web 程序或服務器之類的應用時,這非常有用,因為我們希望在 CI 環境中模擬用戶的行為。因此,如果在源代碼控制(如 git)中跟蹤我們的 lock file,就可以確保每個開發人員以及服務器或構建系統還有 CI 系統都能夠使用相同版本的依賴項。

那么當我們編寫要發布到 npm 的庫時,為什么不能做同樣的事呢?要回答這個問題,首先要討論發布的工作原理。

如何發布模塊

與某些人想的相反,你發布到 npm 的內容并不總是與 GitHub 上或項目中的內容完全相同。發布模塊的方式是 npm 將通過檢查 package.json 和 .npmignore 文件中的 files 鍵或者如果沒有``來確定應該發布的文件。 gitignore文件。還有一些文件總是包含在內,有些文件將永遠被排除在外。你可以在 [npm page](https://docs.npmjs.com/files/package.json#files) 上找到這些文件的完整列表。例如,.git` 目錄始終會被忽略。

之后 npm 將會獲取文件列表,并用 npm pack 將它們一起打包成 tarball。如果要查看打包的文件,可以在項目中運行 npm pack --dry-run,能看到包含所有文件的輸出:

那個 tarball 將被上傳到 npm注冊表。運行此命令時你可能會注意到加入你已經有了一個 package-lock.json,它實際上沒有被捆綁。這是因為 package-lock.json 將始終被忽略。

這意味著如果另一個開發人員安裝了你發布的軟件包,他們永遠不會下載你的 package-lock.json,因此在安裝過程中將會完全忽略它。

這可能會導致“在我的機器上能夠工作”的意外,因為你的 CI 和開發環境可能會選擇不同的依賴項版本。那么我們可以做些什么呢?

禁用 lock file 并收縮包裝

首先,應該停止跟蹤我們的 lock file。如果你用的是git,請將以下內容添加到項目中的 .gitignore 文件中:

yarn.lockpackage-lock.json

Yarn 的文檔說即使你創建了庫,也應該簽入 yarn.lock,但是如果你想確保自己能夠保證與用戶相同的體驗,我建議將其添加到 .gitignore。

你可以通過在項目里的 .npmrc 文件中添加以下內容來關閉 package-lock.json 文件的生成:

package-lock=false

對于 yarn,你可以通過添加 yarn install --no-lockfile 標志保證不生成 lock file。

擺脫了 package-lock.json 并不意味著無法固定我們所擁有的依賴關系和子依賴關系。我們可以用另一個名為 npm-shrinkwrap.json 的文件。

它與 package-lock.json 基本相同,并由 npm shrinkwrap 生成并實際的打包并發布到 npm 注冊表中。
因此,通過將 npm shrinkwrap 添加到 npm 腳本作為 prepack 腳本甚至是 git commit hook,可以確保在你的開發環境中,與你的用戶和 CI 中使用相同版本的依賴項。

**一個重要的提示:**通過使用 shrinkwrap 文件,你可以確定精確的版本,但它也會阻止人們獲得自動安裝的關鍵補丁程序。 npm 強烈反對庫的 shrinkwrap 的用例。

了解更多信息

不幸的是,雖然 npm docs 中有很多相關內容,但有時很難找到你想要的東西。如果你想更好地了解安裝或打包的內容,那么你一個常見標志就是 --dry-run。運行該命令而不會影響你的系統。

例如 npm install --dry-run 并不會將依賴項安裝到你的文件系統,或者 npm publish --dry-run 實際上也不會發布該包。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人在线网| 2019av中文字幕| 国产精品久久久久久搜索| 日韩av一区二区在线观看| 国产一区私人高清影院| 中文字幕亚洲一区二区三区五十路| 欧美高清视频在线观看| 日韩高清免费观看| 亚洲第一免费网站| 国产日韩欧美夫妻视频在线观看| 一区二区三区天堂av| 日韩国产高清污视频在线观看| 在线观看国产成人av片| 欧美午夜宅男影院在线观看| 欧美黑人狂野猛交老妇| 国产999视频| 色偷偷888欧美精品久久久| 国产久一一精品| 国产精品私拍pans大尺度在线| 国产午夜精品全部视频在线播放| 92版电视剧仙鹤神针在线观看| 国产欧美一区二区三区在线| 国产成人精品久久二区二区91| 国产精品自拍小视频| 国产美女扒开尿口久久久| 欧美色道久久88综合亚洲精品| 亚洲欧美精品在线| 欧美性生交大片免网| 久久夜色精品亚洲噜噜国产mv| 伦理中文字幕亚洲| 日韩av在线高清| 亚洲精品国产综合久久| 精品magnet| 亚洲色图第一页| 亚洲精品欧美极品| 欧美成年人视频| 国产精品人成电影| 欧美黄色成人网| 少妇精69xxtheporn| 国产精品va在线播放我和闺蜜| 国产精品欧美一区二区| 亚洲欧美在线免费观看| 日韩**中文字幕毛片| 日韩美女av在线免费观看| 日韩欧美国产中文字幕| 欧美中文字幕在线视频| 国产视频精品一区二区三区| 欧美制服第一页| 亚洲福利影片在线| 在线观看亚洲视频| 亚洲欧美日韩国产中文专区| 91精品国产九九九久久久亚洲| 欧美成人黑人xx视频免费观看| 国产成人在线一区| 亚洲色图35p| 久久99热精品这里久久精品| 中文字幕精品在线| 国模视频一区二区| 亚洲精品久久久久久久久久久久| 国产日韩欧美夫妻视频在线观看| 国产精品视频成人| 日韩av日韩在线观看| 欧美黑人性视频| 国产主播在线一区| 日韩在线精品视频| 欧美午夜激情在线| 91av免费观看91av精品在线| 日韩成人性视频| 色综合久久中文字幕综合网小说| …久久精品99久久香蕉国产| 中文字幕欧美日韩精品| 日韩极品精品视频免费观看| 久久久亚洲国产天美传媒修理工| 国产亚洲精品久久久久动| 亚洲人成自拍网站| 亚洲日韩欧美视频| 日本一区二区不卡| 日韩av电影免费观看高清| 97免费视频在线播放| 97视频在线看| 久久国产精品亚洲| 日韩国产在线播放| 欧美日韩激情视频8区| 久久九九有精品国产23| 精品国产精品自拍| 国产精品免费在线免费| 久久久久久久久国产| 欧美性20hd另类| 欧美午夜宅男影院在线观看| 亚洲成年人在线| 国产精品日韩专区| 国产日韩视频在线观看| 91啪国产在线| 国产午夜精品美女视频明星a级| 国产精品第8页| 国产精品一香蕉国产线看观看| 日本电影亚洲天堂| 日韩最新中文字幕电影免费看| 亚洲奶大毛多的老太婆| 国产91精品高潮白浆喷水| 成人午夜黄色影院| 国产91亚洲精品| 午夜精品在线观看| 欧美一乱一性一交一视频| 国产91成人video| 精品女厕一区二区三区| 不卡在线观看电视剧完整版| 欧美激情亚洲激情| 久久这里只有精品视频首页| 国产精品电影网| 尤物99国产成人精品视频| 亚洲精品国产精品久久清纯直播| 欧美老肥婆性猛交视频| 亚洲激情视频在线| 欧美大片免费观看在线观看网站推荐| 最近2019年手机中文字幕| 亚洲美女动态图120秒| 欧美黄色片免费观看| 精品久久久视频| 日韩视频免费看| 91精品久久久久久久久不口人| 欧美激情一二区| 日本亚洲欧洲色| 欧美精品久久久久久久久久| 国产精品一区二区久久久| 成人精品在线观看| 欧美精品videosex性欧美| 国产精品扒开腿做| 久久免费在线观看| 黑人巨大精品欧美一区二区三区| 欧美在线一级视频| 亚洲欧洲一区二区三区在线观看| 国产精品久久一区| 欧美性极品少妇精品网站| 亚洲品质视频自拍网| 免费91在线视频| 国产亚洲欧洲在线| 日韩在线视频国产| 久久久久久免费精品| 欧美野外wwwxxx| 成人福利免费观看| 韩国精品美女www爽爽爽视频| 久久av中文字幕| 亚洲欧美色婷婷| 伊人av综合网| 国产精品视频永久免费播放| 亚洲区bt下载| 欧美老少做受xxxx高潮| 欧美理论电影在线播放| 国产日韩在线观看av| 欧美在线国产精品| 国产亚洲日本欧美韩国| 97精品国产97久久久久久免费| 欧美人与性动交| 欧美久久精品一级黑人c片| 国产精品成人av在线| 国产日产欧美精品| 欧美极品美女视频网站在线观看免费| 91豆花精品一区| 91精品国产沙发| 亚洲free性xxxx护士白浆| 国产精品免费电影| 国产欧美日韩视频| 亚洲精品免费av|