Yarn:将 JavaScript 依赖项重新部署到生产服务器的过程(使用 `yarn.lock` 文件)

Posted

技术标签:

【中文标题】Yarn:将 JavaScript 依赖项重新部署到生产服务器的过程(使用 `yarn.lock` 文件)【英文标题】:Yarn: Procedure for redeploying JavaScript dependencies to Production Server (usage of `yarn.lock` file) 【发布时间】:2019-02-01 20:59:00 【问题描述】:

我已阅读有关 Yarn 的文档,并且我知道 lock 文件应该提交给 VC。请参阅this,它从高层次上解释了为什么需要锁定文件,而this 列出了一堆命令,而没有太多解释它们的实际作用!

我还在 *** 上阅读了很多关于 lock 文件是否应该提交给 VC 的问题。

但是,所有文档和 SO 线程似乎都忽略了我想知道的细节,即以下内容;什么是正确的程序(要运行的正确命令):

    在需要时更新 yarn.lock 文件(即在开发环境中,我想提取最新的次要版本并更新 lock 文件以反映这一点) 用于使我的锁定文件与其他开发人员保持同步,以确保他们从完全相同的依赖版本进行开发/测试,并且 用于更新/重新同步生产服务器上的 node_modules 目录(即确保生产服务器未在依赖包的不同/破坏版本上运行)

我之所以这样问,部分原因是过去在服务器上执行git pull 时,我收到消息告诉我yarn.lock 文件已独立于开发/VC 流程进行更新。就我而言,绝不应该允许这种情况发生。

【问题讨论】:

在添加包时在 package.json 文件中指定包时,最好指定要安装的包的exact version。这是帮助您跨系统维护正确包的机制。即:yarn add my-package@1.0.1 并且在安装更新版本的包时更加勤奋,以确保与其他包的兼容性。 【参考方案1】:

以下信息基于我们在 Orange 每天使用的信息,这可能不是唯一的事实。

1) 更新yarn.lock

yarn upgrade [package | package@tag | package@version | @scope/]... [--ignore-engines] [--pattern]

此命令根据package.json 文件中指定的版本范围将依赖项更新到其最新版本。 yarn.lock 文件也将被重新创建。

来源:https://yarnpkg.com/en/docs/cli/upgrade

2) 开发者之间的依赖

我建议您做的是创建一个脚本,该脚本将在以下人员的帮助下检查当前的“推荐”版本:

yarn check

验证当前项目的package.json中的包依赖版本是否与yarn的锁文件中的版本匹配。

来源:https://yarnpkg.com/en/docs/cli/check

3) 更新服务器生产

与 2 相同 ) 使用 git hook 脚本,如果 package.json 版本是正确的,如果不启动 yarn update,应该可以帮助您 yarn check

【讨论】:

【参考方案2】:

    老实说,这是一个意见/偏好问题。我见过一些策略:

    使用yarn upgrade 在运行 yarn 之前手动调整 package.json 中的版本

    就像 Fabien 提到的:使用 yarn check

    您可以使用 yarn 离线镜像,将 npm 包的缓存提交到版本控制中。 (见this中篇)

    另外,使用yarn --offline 有很多好处:

    构建速度更快,因为您不必从 npm 注册表中获取包。 如果您没有正确的依赖项,您的构建将失败。

【讨论】:

以上是关于Yarn:将 JavaScript 依赖项重新部署到生产服务器的过程(使用 `yarn.lock` 文件)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Yarn.lock 中开发依赖项的特定依赖项

当我只需要构建时,为啥 yarn 会安装开发依赖项?

Yarn 包管理器:从私有 Bitbucket 存储库安装依赖项

如何将 npm 依赖项添加为对等依赖项

yarn的使用及工作流程

无法从 GitHub NPM 注册表 (npm.pkg.github.com) 通过 yarn 下载依赖项