npm 包 ci-run-staged 使用教程

简介

在开发的过程中,我们需要进行代码检查、格式化、测试等操作。ci-run-staged 是一款能够帮助我们在 Git 提交的时候自动执行预定义的操作的工具,它能够自动运行通过 Git 暂存的代码,并且只会运行被修改的文件。

在本文中,我们将介绍如何使用 ci-run-staged 实现自动化的代码检查、格式化、测试等操作。

安装和使用

ci-run-staged 可以通过 npm 安装:

--- ------- ------------- ----------

然后,在 package.json 文件中定义 npm scripts,如下所示:

-
  ---------- -
    ------- --------
    ------- ------- ------- --------------- --- ------
    ----- -------------- -----------------------------
  -
-

其中,各个命令的含义如下:

  • test:运行测试用例
  • lint:执行代码检查和格式化
  • ci:运行 ci-run-staged 工具

然后,在项目的根目录下创建 .ci-run-staged.json 配置文件,配置如下:

-
  -------- -
    --------------
    --------------
  --
  ----------- -
    ---- --- ------
    ---- --- -----
  -
-

其中,files 属性用来指定需要监控的文件,**/*.js 表示监控所有的 .js 文件。commands 属性用来指定需要执行的命令。

执行 commit 操作时,ci-run-staged 会自动运行以及修改的 .js 文件,并执行 npm run ci 命令。如果满足任意一个文件被修改,那么 commands 中定义的命令都会执行。

如果有多个命令需要运行,可以在 commands 数组中定义多个命令,如上所示。

深入理解

ci-run-staged 的原理是使用 Git Hook 实现的。在执行 Git 提交的时候,Git 会自动运行预定义的钩子脚本,我们可以自定义这些脚本来实现自动化的操作。

ci-run-staged 使用 Git Hook 实现代码检查、格式化、测试等操作,其实现原理如下:

  1. 在 .git/hooks 目录下创建 pre-commit 钩子脚本,定义执行 ci-run-staged 的逻辑:
-----------
-- ------- -- ------------- ---------- ----- ----
  ---- -------- -----------------
  ------------- ----------------------------
  ---- --
----
  ---- -------------- --- ------ ------ ------- -- ---- ---- ------- ----------------
  ---- -
--
  1. 在 Git 提交时,Git 会自动运行 pre-commit 钩子脚本,它将会运行 ci-run-staged 工具。

通过以上操作,我们就可以在 Git 提交的时候自动执行预定义的操作,如代码检查、格式化、测试等。

示例代码

以一个简单的示例项目为例,展示如何使用 ci-run-staged 实现自动化的代码检查、格式化、测试等操作。

  1. 创建一个空的项目,并安装 ci-run-staged:
----- ------------
-- ------------
--- ------- ------------- ----------
  1. 初始化项目,使用 eslint 和 mocha 检查代码和运行测试:
--- ---- --
--- ------- ------ ----------
--- ------- ----- ----------
  1. 创建测试文件 test/test.js,内容如下:
----- ------ - ------------------

----------------- ---------- -
  ---------------------- ---------- -
    ---------- ------ -- ---- --- ----- -- --- --------- ---------- -
      ---------------- -- -------------- ----
    ---
  ---
---
  1. 创建源代码文件 src/index.js,内容如下:
-------- ------ -- -
  ------ - - --
-

-------------- - - --- --
  1. 创建 .eslintrc.json 文件,内容如下:
-
  ---------- ---------------------
  -------- -
    ------- -------
  -
-
  1. 在 package.json 文件中定义 npm scripts 和 ci-run-staged 配置,内容如下:
-
  ------- ---------------
  ---------- --------
  -------------- ---
  ------- -----------
  ---------- -
    ------- --------
    ------- ------- ------- --------------- --- ------
    ----- -------------- -----------------------------
  --
  ----------- ---
  --------- ---
  ---------- ------
  ------------------ -
    ---------------- ---------
    --------- ----------
    -------- --------
  -
-
  1. 创建 .ci-run-staged.json 配置文件,内容如下:
-
  -------- -
    --------------
    --------------
  --
  ----------- -
    ---- --- ------
    ---- --- -----
  -
-
  1. 修改 src/index.js 文件,加入语法错误:
-------- ------ -- -
  ------ - - -
-

-------------- - - --- --
  1. 提交代码,观察 ci-run-staged 的执行情况:
--- ----
--- --- -
--- ------ -- -------- -------
  1. 修改 src/index.js 文件中的语法错误,并提交代码:
--- --- -
--- ------ -- ---- ------ ------

运行结果如下:

从运行结果可以看出,ci-run-staged 自动执行了 eslint 和 mocha,以及只运行被修改的文件。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600668e3d9381d61a3540a72


猜你喜欢

  • 使用 react-native-geolocation-monitor 监测地理位置变化

    在开发基于 React Native 的应用程序时,跟踪地理位置变化是非常常见的需求。虽然 React Native 已经内置了 Geolocation API,但是有些开发者对此感到不满意,原因是 ...

    3 年前
  • npm 包 webmiddle-component-cheerio-to-virtual 使用教程

    介绍 webmiddle-component-cheerio-to-virtual 是一个 npm 包,可将 cheerio 选择器转换为 virtual-dom 节点。

    3 年前
  • npm 包 vue2-text-slider 使用教程

    引言 在前端开发中,我们常常需要使用轮播图或者滚动字幕等效果。而 vue2-text-slider 就是一款可以实现滚动字幕的 Vue 组件。 本文将详细介绍 vue2-text-slider 的使用...

    3 年前
  • NPM包webmiddle-component-virtual-to-json使用教程

    在前端开发中,我们常常需要针对不同的数据格式进行处理和转换。而在这些数据格式之间进行转换是一项比较繁琐的任务。但是现在有一个名为webmiddle-component-virtual-to-json的...

    3 年前
  • npm 包 psd-patch 使用教程

    在前端开发中,我们经常需要处理图片。其中,PSD 格式是一种比较常见的图片格式,它是 Adobe Photoshop 的专用格式,主要用于保存图层、通道、合成方式等信息。

    3 年前
  • npm 包 react-native-range 使用教程

    react-native-range 是一个 React Native 组件库,它提供了一个可配置的滑块组件,可以用于用户在一个范围内选择某个数值,比如音量大小、温度等。

    3 年前
  • npm 包 react-native-splash-screen-extended 使用教程

    在 React Native 应用中,启动页是非常重要的一个页面。它不仅可以给用户一个良好的用户体验,还可以在启动时加载必要的资源,提高应用的启动速度。然而,React Native 默认的启动页功能...

    3 年前
  • npm 包 snake-cache 使用教程

    简介 snake-cache 是一款轻量级的缓存管理工具,适用于前端项目中的数据缓存需求。它具有简单易懂、易使用、易定制等特点,可以提高数据查询效率,减轻服务器压力,优化用户体验。

    3 年前
  • npm包 popcorn-api 使用教程

    什么是npm? npm是Node.js的包管理工具,它允许开发人员在自己的项目中使用现成的代码块,避免了重复开发。 npm有一个广泛的包生态系统,其中包括了各种各样的开源软件,这些软件可以为前端开发人...

    3 年前
  • npm 包 lapi-dev 使用教程

    前言 在 Web 前端开发中,有很多不同的技术可以选择。其中也包括各种工具和库,可以帮助开发人员更高效地完成任务。npm 是前端开发中最常用的包管理工具之一,它提供了大量的第三方包。

    3 年前
  • npm 包 gisc 使用教程

    简介 gisc 是一个基于 ArcGIS API for JavaScript 开发的三维地图可视化库,它提供了丰富的可视化效果和可扩展性,是开发基于 ArcGIS API for JavaScrip...

    3 年前
  • npm 包 weare-soap 使用教程

    在前端开发中,我们经常需要在应用中使用 Web 服务来获取一些数据。SOAP(Simple Object Access Protocol)是一种在计算机网络上进行结构化信息传递的协议。

    3 年前
  • npm 包 drapi-police-gforms-abilities 使用教程

    本文将为大家介绍 drapi-police-gforms-abilities,这是一个使用Node.js开发的npm包,它的主要作用是在Google表单中生成RESTful API,进而为用户提供便...

    3 年前
  • npm 包 ember-contextual-back 使用教程

    在前端开发中,我们常常会遇到需要实现一个返回功能的需求,常见的方式是使用浏览器的返回按钮,但是有时候我们需要实现自定义的返回功能,比如在一个嵌套的组件结构中,点击返回按钮只返回到上一个组件而不是整个页...

    3 年前
  • npm 包 lazerpath 使用教程

    简介 lazerpath 是一个基于 JavaScript 的轻量级路径处理库。它提供了一系列 API,用于操作多种路径格式,例如文件路径、URL 路径等。使用 lazerpath 可以减少路径操作的...

    3 年前
  • npm 包 bundle-lambda 使用教程

    AWS Lambda 是一项强大的服务器端计算服务,可以让开发者在云端运行代码,而无需关心底层基础架构。开发者只需上传代码,指定执行程序和调用 API,AWS Lambda 就可以代表开发者处理服务器...

    3 年前
  • npm 包 friends-casts-name 使用教程

    什么是 npm 包 friends-casts-name friends-casts-name 是一个 npm 包,它允许你根据输入的名字生成一些有创意的朋友圈名称。

    3 年前
  • npm 包 @evansjohnson/react-joyride 使用教程

    介绍 @evansjohnson/react-joyride 是一个基于 React 的轻量级应用程序导航库,用于在您的应用程序中添加一个自动化的产品演示。它是一种简单的方法来为用户提供对您的应用程序...

    3 年前
  • npm 包 sovrin-did 使用教程

    简介 Sovrin DID 是一种基于区块链的去中心化身份标识系统。它可以使个人掌握自己的身份数据,并控制其在各种场景中的使用。sovrin-did 是一个 npm 包,可以帮助开发者在应用程序中使用...

    3 年前
  • NPM 包 @amittksharma/games 使用教程

    随着互联网和移动设备的普及,游戏已经成为人们生活中必不可少的一部分。而在前端领域,游戏的开发和设计也成为越来越多开发者的需求。但是,在前端开发游戏时,经常需要用到各种动画效果、特效等,这时候就需要一些...

    3 年前

相关推荐

    暂无文章