<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 21:54:37
        文檔

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

        什么時候不能在 Node.js 中使用 Lock Files:快速摘要 如果你開發像 Web 服務器之類的程序,那么 lock file 是非常有用的。但是如果將庫或 CLI 發布到 npm,則永遠不要發布 lock file。因為如果你使用它,則意味著你和你的用戶可能在使用不同版本的依賴項。 什么是Lock File? lock
        推薦度:
        導讀什么時候不能在 Node.js 中使用 Lock Files:快速摘要 如果你開發像 Web 服務器之類的程序,那么 lock file 是非常有用的。但是如果將庫或 CLI 發布到 npm,則永遠不要發布 lock file。因為如果你使用它,則意味著你和你的用戶可能在使用不同版本的依賴項。 什么是Lock File? lock

        快速摘要

        如果你開發像 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 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"

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

      1. 安裝的每個依賴項的實際版本
      2. 每個依賴項的依賴項
      3. 已解決的軟件包中用校驗和驗證軟件包的完整性
      4. 既然 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.json
        yarn 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.lock
        package-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 實際上也不會發布該包。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        什么時候不能在 Node.js 中使用 Lock Files:快速摘要 如果你開發像 Web 服務器之類的程序,那么 lock file 是非常有用的。但是如果將庫或 CLI 發布到 npm,則永遠不要發布 lock file。因為如果你使用它,則意味著你和你的用戶可能在使用不同版本的依賴項。 什么是Lock File? lock
        推薦度:
        標簽: js File Files
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 午夜一级免费视频| 91情侣在线精品国产免费| 伊人久久亚洲综合影院| 亚洲精品无码成人片久久不卡| 日本一区二区三区免费高清| 亚洲国产成人精品电影| 毛片免费视频播放| 亚洲av无码一区二区三区四区| 免费无码AV片在线观看软件| 亚洲中文字幕无码爆乳app| 色吊丝永久在线观看最新免费| 亚洲日本一线产区和二线 | 亚洲国产无线乱码在线观看| 免费黄色app网站| 老妇激情毛片免费| 亚洲日韩精品一区二区三区| 午夜不卡久久精品无码免费| 337p欧洲亚洲大胆艺术| 我想看一级毛片免费的| 大桥未久亚洲无av码在线| 国产a v无码专区亚洲av| 一级毛片**不卡免费播| 亚洲人妖女同在线播放| 日韩免费高清视频| 精品国产福利尤物免费| 亚洲综合精品一二三区在线| 毛片免费视频观看| jizz18免费视频| 亚洲沟沟美女亚洲沟沟| 国产猛烈高潮尖叫视频免费| 春意影院午夜爽爽爽免费| 亚洲国产精品自在在线观看| 成人性生活免费视频| 中文字幕的电影免费网站| 精品亚洲麻豆1区2区3区| 国产一级一片免费播放| A级毛片高清免费视频在线播放| 亚洲成人免费在线观看| 亚洲高清国产拍精品青青草原| 久久精品一区二区免费看| 亚洲精品无码不卡在线播放|