npm 是一个非常流行的 Node.js 包管理器,方便开发者快速安装、更新、卸载以及发布 npm 包。但是在一些大型项目中,我们需要经常更新依赖包,同时验证代码的改动是否对整个项目产生了影响。而 npm 包 @0x-lerna-fork/changed 的出现就解决了这个问题。本文将介绍如何使用该包进行项目代码的变动检测。
什么是 @0x-lerna-fork/changed 包
@0x-lerna-fork/changed 是基于 Lerna 的扩展包,专门用于快速检测项目中变动的包以及变动相关的依赖包。由于该包使用了 Lerna 的底层机制,因此前提是要使用 Lerna 管理项目。
如何使用 @0x-lerna-fork/changed 包
@0x-lerna-fork/changed 包非常容易使用,我们只需要在项目中使用 npm install 命令来安装即可。
npm install @0x-lerna-fork/changed --save-dev
安装完成后,我们可以使用 changed 命令来检测变动的相关信息。changed 命令支持三个参数,分别是:
--include-merged-tags
: 包含合并的标签。--since [branch|commit]
: 自最后一个特定的 Git 提交或指定分支以来所做的更改。--conventional-commits-only
: 仅检测符合约定式提交的包。
我们可以在项目的 package.json 中添加一个 scripts 命令来执行 @0x-lerna-fork/changed 的命令。在该命令中,我们可以设置需要忽略变动的包,以及需要检测的包的路径。
{ "scripts": { "changed": "lerna ls --since=HEAD~1 --json | changed --ignore @babel/cli,@babel/core,@babel/preset-env --packages ./packages/**" } }
在上述命令中,我们使用了 Lerna 的 lerna ls
命令来列出自上次提交以来所有找到的包信息。随后,将包信息传递给 changed 命令进行检测。其中,我们忽略的包是 @babel/cli
、@babel/core
和 @babel/preset-env
,需要检测的包的路径为 ./packages/**
。
示例代码
这里我们可以使用一个简单的 TypeScript 项目来演示如何使用 @0x-lerna-fork/changed 包进行变动检测。首先我们需要创建一个 TypeScript 项目,然后添加 Lerna 来管理包:
npm init npm install --global lerna lerna init
随后,我们在项目的根目录下创建一个 src 目录,并添加一个名为 add.ts
的文件,在该文件中添加以下代码:
export function add(a: number, b: number): number { return a + b; }
接着,我们在该项目下使用 Lerna 来创建一个名为 sum 的包,该包需要使用 add 函数实现俩个数字相加功能。
lerna create sum
在创建 sum 包后,我们可以在 sum 包中编辑 index.ts 文件,添加以下代码:
import { add } from "../src/add"; export function sum(a: number, b: number): number { return add(a, b); }
最后,我们需要在项目的 package.json 中添加测试命令:
{ "scripts": { "test": "jest" } }
在安装 Jest 库后,编写测试代码:
-- -------------------- ---- ------- ------ - --- - ---- ----------- --------------- -- -- - ---------- - - - -- ----- --- -- -- - ------------- ------------ --- ---------- - - - -- ----- --- -- -- - ------------- ------------ --- ---
现在,我们已经完成了该项目的代码编写工作,并添加了一些简单的测试用例。在此基础上,我们可以使用 @0x-lerna-fork/changed 包来检测代码变动是否对项目造成了影响。
首先,我们需要在项目中安装 @0x-lerna-fork/changed 包:
npm install @0x-lerna-fork/changed --save-dev
接着,我们在项目的 package.json 中添加一个 changed 命令:
{ "scripts": { "changed": "lerna ls --since=HEAD~1 --json | changed --ignore jest,@types/jest,@0x-lerna-fork/changed --packages ./packages/**" } }
在上述命令中,我们忽略了 Jest、@types/jest 和 @0x-lerna-fork/changed 三个包,因为这些包并不需要被检测。而需要检测变动的包是 sum 包,其路径为 ./packages/**
。
执行该命令,我们可以在控制台中看到检测到了新增依赖包 @types/uniqid
, 所以我们需要重新安装依赖包:
lerna clean --yes lerna bootstrap
完整的示例代码参考:Github。
总结
@0x-lerna-fork/changed 包可以帮助我们更好的管理项目。特别是在大型项目中,检测变动是否会对其他包文件产生影响非常重要。@0x-lerna-fork/changed 包的出现,方便我们快速检测代码变动,同时也保证了整个项目的完整性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/113662