最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

什么時(shí)候不能在 Node.js 中使用 Lock Files

 更新時(shí)間:2019年06月24日 09:05:18   作者:前端先鋒  
這篇文章主要介紹了什么時(shí)候不能在 Node.js 中使用 Lock Files,但是當(dāng)你在開發(fā)要發(fā)布到 npm 的包時(shí),應(yīng)避免使用這類 lock file 。下面我們來一起了解一下吧

快速摘要

如果你開發(fā)像 Web 服務(wù)器之類的程序,那么 lock file 是非常有用的。但是如果將庫或 CLI 發(fā)布到 npm,則永遠(yuǎn)不要發(fā)布 lock file。因?yàn)槿绻闶褂盟?,則意味著你和你的用戶可能在使用不同版本的依賴項(xiàng)。

什么是Lock File?

lock file 描述了整個(gè)依賴關(guān)系樹,它在創(chuàng)建時(shí)被解析,包括具有特定版本的嵌套依賴關(guān)系。在 npm 名為 package-lock.json ,在 yarn 中名為 yarn.lock。在這兩個(gè)npm和yarn它們被放置旁邊你的package.json。
package-lock.json 的內(nèi)容應(yīng)該是這樣:

{
"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 v1

ansi-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"

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

  • 安裝的每個(gè)依賴項(xiàng)的實(shí)際版本
  • 每個(gè)依賴項(xiàng)的依賴項(xiàng)
  • 已解決的軟件包中用校驗(yàn)和驗(yàn)證軟件包的完整性

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

package.json vs. Lock File

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

這意味著,如果在發(fā)布新版本時(shí)多次運(yùn)行 npm install ,有可能會(huì)得到相同版本的依賴項(xiàng)。例如用 npm install twilio 安裝 twilio 這樣的依賴項(xiàng),那么 package.json 中的依賴項(xiàng)可能會(huì)存在類似于這樣的條目:

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

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

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

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

當(dāng)你在構(gòu)建 Web 程序或服務(wù)器之類的應(yīng)用時(shí),這非常有用,因?yàn)槲覀兿M?CI 環(huán)境中模擬用戶的行為。因此,如果在源代碼控制(如 git)中跟蹤我們的 lock file,就可以確保每個(gè)開發(fā)人員以及服務(wù)器或構(gòu)建系統(tǒng)還有 CI 系統(tǒng)都能夠使用相同版本的依賴項(xiàng)。

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

如何發(fā)布模塊

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

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

那個(gè) tarball 將被上傳到 npm注冊(cè)表。運(yùn)行此命令時(shí)你可能會(huì)注意到加入你已經(jīng)有了一個(gè) package-lock.json,它實(shí)際上沒有被捆綁。這是因?yàn)?package-lock.json 將始終被忽略。

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

這可能會(huì)導(dǎo)致“在我的機(jī)器上能夠工作”的意外,因?yàn)槟愕?CI 和開發(fā)環(huán)境可能會(huì)選擇不同的依賴項(xiàng)版本。那么我們可以做些什么呢?

禁用 lock file 并收縮包裝

首先,應(yīng)該停止跟蹤我們的 lock file。如果你用的是git,請(qǐng)將以下內(nèi)容添加到項(xiàng)目中的 .gitignore 文件中:

yarn.lock
package-lock.json

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

你可以通過在項(xiàng)目里的 .npmrc 文件中添加以下內(nèi)容來關(guān)閉 package-lock.json 文件的生成:

package-lock=false

對(duì)于 yarn,你可以通過添加 yarn install --no-lockfile 標(biāo)志保證不生成 lock file。

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

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

**一個(gè)重要的提示:**通過使用 shrinkwrap 文件,你可以確定精確的版本,但它也會(huì)阻止人們獲得自動(dòng)安裝的關(guān)鍵補(bǔ)丁程序。 npm 強(qiáng)烈反對(duì)庫的 shrinkwrap 的用例。

了解更多信息

不幸的是,雖然 npm docs 中有很多相關(guān)內(nèi)容,但有時(shí)很難找到你想要的東西。如果你想更好地了解安裝或打包的內(nèi)容,那么你一個(gè)常見標(biāo)志就是 --dry-run。運(yùn)行該命令而不會(huì)影響你的系統(tǒng)。

例如 npm install --dry-run 并不會(huì)將依賴項(xiàng)安裝到你的文件系統(tǒng),或者 npm publish --dry-run 實(shí)際上也不會(huì)發(fā)布該包。

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

相關(guān)文章

  • 解析Node.js基于模塊和包的代碼部署方式

    解析Node.js基于模塊和包的代碼部署方式

    這篇文章主要介紹了解析Node.js基于模塊和包的代碼部署方式,作為一個(gè)服務(wù)于本地操作系統(tǒng)的JavaScript解釋器,Node采用了簡(jiǎn)潔的基于模塊和包概念的部署方式,需要的朋友可以參考下
    2016-02-02
  • sails框架的學(xué)習(xí)指南

    sails框架的學(xué)習(xí)指南

    本文從最基礎(chǔ)的sails框架知識(shí)開始講起,通過示例給我們展示了sails框架的各個(gè)方面,非常的不錯(cuò),推薦給小伙伴們
    2014-12-12
  • 初探nodeJS

    初探nodeJS

    本文主要介紹了nodeJS的基礎(chǔ)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • node.js中的path.normalize方法使用說明

    node.js中的path.normalize方法使用說明

    這篇文章主要介紹了node.js中的path.normalize方法使用說明,本文介紹了path.normalize的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs-cluster模塊知識(shí)點(diǎn)總結(jié)及實(shí)例用法

    Nodejs-cluster模塊知識(shí)點(diǎn)總結(jié)及實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于Nodejs-cluster模塊知識(shí)點(diǎn)總結(jié)及實(shí)例用法,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • 輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作

    輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作,本系列文章會(huì)教你一步一步創(chuàng)建一個(gè)完整的服務(wù)器,要的朋友可以參考下
    2014-12-12
  • NodeJS 中Stream 的基本使用

    NodeJS 中Stream 的基本使用

    在 NodeJS 中,我們對(duì)文件的操作需要依賴核心模塊 fs , fs 中有很基本 API 可以幫助我們讀寫占用內(nèi)存較小的文件,這篇文章主要介紹了NodeJS 中Stream 的基本使用,需要的朋友可以參考下
    2018-07-07
  • Yarn的安裝與使用詳細(xì)介紹

    Yarn的安裝與使用詳細(xì)介紹

    不知道大家有沒有覺察到Facebook近年大招頻出。Yarn是Facebook最近發(fā)布的一款依賴包安裝工具。Yarn是一個(gè)新的快速安全可信賴的可以替代NPM的依賴管理工具,Yarn正式發(fā)布沒幾天已經(jīng)迅速達(dá)到了數(shù)萬贊,就可以知道大家苦NPM久已。這篇文章將詳細(xì)介紹Yarn的安裝與使用。
    2016-10-10
  • 如何用npm命令刪除開發(fā)項(xiàng)目中的node_modules文件夾

    如何用npm命令刪除開發(fā)項(xiàng)目中的node_modules文件夾

    每個(gè)項(xiàng)目都會(huì)產(chǎn)生一個(gè)node_modules,每個(gè)node_modules少則幾十兆,多則幾百甚至上千兆,隨著時(shí)間的積累,維護(hù)項(xiàng)目的增加,整個(gè)項(xiàng)目目錄體積會(huì)越來越大,這篇文章主要給大家介紹了關(guān)于如何用npm命令刪除開發(fā)項(xiàng)目中的node_modules文件夾,需要的朋友可以參考下
    2023-12-12
  • Nodejs調(diào)用WebService的示例代碼

    Nodejs調(diào)用WebService的示例代碼

    本篇文章主要介紹了Nodejs調(diào)用WebService的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09

最新評(píng)論

大埔县| 昂仁县| 长汀县| 武义县| 芜湖市| 塘沽区| 汕尾市| 七台河市| 顺昌县| 屯留县| 蓬安县| 达孜县| 凤翔县| 乐清市| 隆安县| 乡宁县| 原阳县| 白沙| 封开县| 文登市| 和政县| 招远市| 团风县| 六盘水市| 沾益县| 岳西县| 依安县| 库尔勒市| 南靖县| 耒阳市| 新乐市| 平安县| 丰都县| 宣恩县| 德安县| 泾川县| 石泉县| 乌兰察布市| 浦城县| 东港市| 大足县|