【问题标题】:Yarn vs Npm - "works on my machine" - clarification?Yarn vs Npm - “在我的机器上工作” - 澄清?
【发布时间】:2018-06-11 09:45:20
【问题描述】:

我是纱线新手,在阅读 this article 时有些东西引起了我的注意:

确定性:
相同的依赖项将安装相同的确切 无论安装顺序如何,都可以跨越每台机器。纱线解析 “在我的机器上工作” 围绕版本控制和非确定性的问题 使用锁定文件和确定性的安装算法 可靠

问题:

我不明白:当我写npm install 时,它会查看package.json 并安装确切的版本,每个版本还根据自己的package.json 等安装其依赖项等等

那么有什么区别(关于这方面)

非常感谢“在 npm 中可能出错而在纱线中没有的事情”的场景示例

【问题讨论】:

    标签: javascript node.js npm yarnpkg


    【解决方案1】:

    package.json 文件通常包含依赖项所需的最低版本。例如,您可能有“^1.0.0”,它与版本 1.0.0 或任何次要版本匹配。

    { "name": "my_package", "version": "1.0.0", "dependencies": { "my_dep": "^1.0.0" } }

    运行 npm install 时,它可以安装“my_dep”的 1.0.0、1.1.0、1.2.0 等版本,因为所有这些版本都满足 package.json 的要求。您最终可能会在本地计算机上使用 1.0.0 版本,在测试环境上使用 1.1.0。

    Yarn 会自动创建一个 yarn.lock 文件,以确保您始终安装相同版本的“my_dep”。它会生成如下内容:

    # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
    # yarn lockfile v1
    my_dep@^1.0.0:    
    version "1.1.0"
    resolved "https://registry.npmjs.org/my_dep/-/my_dep-1.1.0.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
    

    Yarn 将使用此文件将“my_dep”解析为版本 1.1.0,即使有可用的新版本 (1.2.0)。

    所有的 yarn.lock 文件都应该检查到源代码控制中(例如 git 或 mercurial)。这允许 Yarn 在所有机器上安装完全相同的依赖树,无论是你同事的笔记本电脑还是 CI 服务器。

    参考资料:

    https://docs.npmjs.com/getting-started/using-a-package.json

    https://docs.npmjs.com/getting-started/semantic-versioning

    https://yarnpkg.com/en/docs/yarn-lock

    【讨论】:

    • 我相信package-lock.jsonnpm install 做同样的工作。
    • @Devmonster 恕我直言,npm install 将安装确切的版本,除非您在现在它介意的地方执行 npm update ~ 或 ^.... 否?
    • @RoyiNamir 是的,但我可以想象一些场景,您可以在不同的环境中使用不同的版本。如果你在本地机器上运行npm update,没有--save选项,更新的版本不会记录在你的package.json中,因此你的本地版本会更新,但不会在你的测试环境中更新
    • 与@DevMonster 声称的不同,npm 具有相同的功能。根据 NPM 的官方文档,package-lock.json 描述了依赖关系树的单一表示,这样可以保证队友、部署和持续集成安装完全相同的依赖关系。 docs.npmjs.com/files/package-lock.json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2012-06-14
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多