npm & yarn 锁定依赖

1,286 阅读3分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

前言

项目安装了依赖A,依赖A安装了依赖B。

依赖B不干了(有新版本 || 提桶了)之后,新安装项目设备安装依赖,发现依赖A出问题了。

而且啊,如果我们用自动化部署,那么每次部署都相当于重新装依赖

为了规避上面的问题,我们需要固定住依赖

一些预备点

  1. package.json 中版本
  2. npm 发布依赖
  3. npm 查看依赖信息
  4. 更改依赖源

package.json 中版本

不同的依赖包信息的表达方式,对应不同的装包情况。根据自身需求选择合理表达方式,默认装包会选择下面第一种

package.json
{
    "dependencies": {
        "lan-test-package1": "^1.0.0",
        "lan-test-package2": "~1.0.0",
        "lan-test-package3": "1.0.0",
    },
 }

"lan-test-package1": "^1.0.0"

安装 lan-test-package1 1.x.x 最新的包

"lan-test-package2": "!1.0.0"

安装 lan-test-package2 1.0.x 最新的包

"lan-test-package3": "1.0.0"

安装 lan-test-package3 1.0.0 的包

npm 发布依赖流程

  1. 当需要的时候可以自己发布依赖
  2. 了解发包过程,可以解释一些依赖报错的原因

拥有 npm 账号

www.npmjs.com/

访问npm 官网进行注册

image.png

本地搭建项目

本地搭建项目可以利用现有的脚手架也可以使用 npm init 初始化项目

本地登录账号,发布包

npm adduser
npm login

这两个命令字面意思。一般我们没有使用过 npm 管理自己的依赖的需要添加用户。要我们输入账号名密码和邮箱,邮箱一般会用来通知依赖的更新等信息

npm publish

这个是发布的命令,在项目的根路径上执行。会根据我们的 package.json 文件执行。

需要注意的是每次我们更新包都需要更改版本号,如果是和之前一样的版本号会导致发布失败。发布成功之后会有一条邮件到我们之前的验证邮箱通知我们。

npm 查看依赖相关信息

依赖详细信息

npm info vue

image.png

npm info vue@next

image.png

上面两个查看命令分别查看 vue 和 vue@next 版本信息

依赖版本列表

npm view element-ui versions

image.png

npm view element-plus versions

image.png

上面两个命令分别查看 element-ui 和 element-plus 的版本号列表。

依赖最新版本

npm view ant-design-vue version

1.7.8

npm view ant-design-vue@next version

2.2.7

npm & cnpm

查看依赖源

npm config get registry

registry.npmjs.org/

cnpm config get registry

registry.npm.taobao.org/

更改依赖源

npm config set registry https://registry.npm.taobao.org/

这里将 npm 的依赖源更改成了淘宝镜像的源,但是并不推荐这种用法。建议需要使用国内镜像的时候使用 cnpm 安装依赖,npm 还是保持着自己的官方源,是登录 npm 必要条件

正题 姗姗来迟,固定依赖

package.json 中固定版本

    "module1": "1.0.0"

我们可以保证安装的依赖是我们指定版本的,但是不能保存依赖的依赖的版本

npm -- package-lock.json

npm install

用 npm 安装依赖,根目录会生成一个 pageage-lock.json,里面是项目版本锁定信息

yarn -- yarn.lock

yarn install

项目使用 yarn 安装依赖之后,根目录会生成一个 yarn.lock 文件,里面是项目版本锁定的信息

小结

  1. 发布npm,需要用npm自己的源。但是呢,npm 的源安装依赖速度不行。所以我想这就是很多人使用 yarn 安装依赖的原因

  2. cnpm i 不过package-lock.json,会根据 package.json 来安装。如果cnpm 过 package-lock.json 的话,那我就不用 yarn 了

  3. 项目的最终形式是:项目的 package.json 依赖用 1.0.0 形式固定 + lock方案

  4. 理解这个问题的最好方式是自己创建两个依赖,还原一下场景~

  5. 哦哦,还有提桶的事。这个是固定版本解决不了的问题的,只能等有同学安装新项目之后报告问题,考虑更新依赖或者换一个用