NodeJs添加代码版权信息命令工具的设计与实现

2023-09-25 17:13张文豪
现代计算机 2023年14期
关键词:命令代码工具

张文豪

(广东白云学院大数据与计算机学院,广州 510450)

0 引言

随着Web 技术的发展,软件项目中前端代码越来越多,前端技术在软件项目中的作用越来越重要,HTML、Javascript、Css 等前端技术成为软件开发必备的技能[1]。2009 年5 月Ryan Dahl发布了NodeJs,是一个基于Chrome V8引擎的JavaScript 运行环境,让JavaScript 运行在服务端的开发平台,也使JavaScript 成为了全球应用最广泛的开发语言[2]。2010 年1 月,NodeJs软件包管理工具NPM 也正式上线,使得NodeJs在项目中的应用更加方便[3]。当前几乎所有前端项目都离不开NodeJs 的相关技术,也形成了很多优秀的前端项目构建工具,如Vite、Webpack、Rollup 等,并且也已经存在很多可以自动添加代码版权信息的插件,但是仍存在需要自己配置好版权信息才能完成的问题[4-6]。由于package.json 文件已经包含了主要的版权信息,如软件名称、版本号、作者、开源协议等,每个NodeJs 模块软件包又都必须包含一个package.json 文件,可以通过package.json 文件来直接获取版权信息[7]。

本文提出通过获取package.json 文件里的相关版权信息来自动生成代码文件的版权信息,实现开箱即用的效果,无需任何配置就能自动添加代码的版权信息,同时考虑到前端项目构建工具众多,将该工具开发为一个NodeJs 的命令行工具,能让该工具在所有前端项目中使用,可以有效提高该工具的通用性。

1 相关技术

NodeJs是Ryan Dahl于2009年发起的一个开源项目,是一个基于Chrome V8 引擎,能够快速构建网络服务与应用的JavaScript 执行平台,目前被广泛应用到各种Web应用的开发项目。

NPM 的全称是NodeJs Package Manager,是一个NodeJs 包管理和分发工具,已经成为非官方的发布NodeJs模块(包)的标准。

package.json 是基于NPM 标准的NodeJs 模块(包)必须存在的描述文件,包括模块名称、版本号、作者、模块描述、关键字、软件许可证、运行脚本、软件依赖包等信息。

npx 的全称是execute npm package binaries,是NPM5.2 以后新增的命令工具,是一个NPM包的执行器,可以用于执行各种命令[8]。

GitHub 于2008 年正式上线,是一个面向开源及私有软件项目的托管平台[9]。

workflow文件是GitHub Actions 的配置文件,存放在代码仓库的.github/workflows/目录下。比如,写一个npm_publish.yaml文件,存储的目录就是.github/workflows/publish.yaml。GitHub 只要发现.github/workflows 目录下里面有.yml 文件,就会自动运行该文件[10]。

2 设计方案

首先根据package.json 的信息自动生成代码版权信息,然后扫描项目构建的代码目录,并将版权信息添加到代码文件的顶部。

2.1 代码版权信息描述模板

pkg 为解析package.json 文件后的对象,name 为模块名称/软件名称、version 为版本号、homepage 为官方主页、author 为软件作者、license 为软件许可证、year 是根据当前时间获取的年份。

2.2 执行流程

通过NPM 发布NodeJs 模块通常都是指定dist目录(构建完成的代码目录)进行发布,可以默认扫描dist 目录下所有代码文件,并添加代码版权信息就可以满足大部分的需求,同时也允许用户通过参数增加需要扫描的目录,来增加其通用性,如图1所示。

图1 具体流程

3 实现

3.1 初始化模块

打开命令行终端,使用mkdir新建模块目录xq-banner,使用cd 命令进入模块目录,执行npm init 初始化模块,按照提示完成相应信息的填写,系统自动完成package.json 的创建,最后再根据模块实际情况调整后的package.json 内容如下:

属性name 要保证在npm 模块包中是唯一的,才能发布成功。同时由于本文实现的是一个NodeJs 的命令工具,必须指定bin 属性的值,该属性由键值对组成,键表示命令,值表示对应的程序文件,例如{“xq-banner”:“./bin/banner.js”},表示该模块存在xq-banner 命令,执行xq-banner命令时,就是执行‘./bin/banner.js’的程序文件。

3.2 程序实现

(1)确定package.json 路径。用户安装本文实现的xq-banner 模块时,会将程序安装在用户模块下的node_modules 目录,同时xq-banner 命令执行的是‘./bin/banner.js’文件,banner.js 文件在用户模块目录的路径为:‘node_modules/xq-banner/bin/banner.js’,因此用户模块的package.json 路径相对于banner.js 文件的路径为:‘../../../package.json’。

(2)生成代码版权信息。确定package.json路径后,使用JSON 工具包解析package.json 的文件,可以得到package.json 的所有信息。同时使用日期工具,根据程序执行时间得到当前的年份。最后按照2.1节生成代码版权的信息。

(3)代码实现。代码实现可以到github 平台查看:https://github.com/xqkeji/xq-banner。

3.3 发布

通常开发完成一个NPM 模块后,可以使用npm publish 命令来完成发布,但是一般的项目代码都是托管到github 平台上,因此可以利用github 的工作流来完成自动发布到https://www.npmjs.com/服务器上。

(1)登录npmjs 的账户,并创建一个Access Token。

如图2 所示,在New Access Token 页面输入Access Token 的name 属性,然后选择用于Publish,最后点击‘Generate Token’后就会生成一个Access Token。

图2 创建Access Token

(2)在xq-banner 的github 代码库新建一个工作流程(workflow)。

如图3所示,模块发布工作流程的代码是相对固定的,只有${{secrets.npm_token}}是动态的,代表npmjs服务器上的Access Token值。

图3 模块发布工作流程代码

图4 github代码库新建密钥页面

(3)在xq-banner的github代码库新建密钥。

Name 为密钥名称,与工作流程代码里的${{secrets.npm_token}}名称保持一致。Secret 填写npmjs服务器上生成的Access Token的值。

通过以上三个步骤后,只要在github代码库中新建一个版本标签,就会自动将xq-banner 代码库的代码也同时发布到npmjs 服务器上的xq-banner模块。

4 应用

(1)安装。

在需要自动添加代码版权信息的npm模块目录下,执行命令:npm i xq-banner,安装xq-banner模块。如图5所示。

图5 安装xq-banner

(2)使用。

安装xq-banner 模块后,可以直接执行npx xq-banner命令为dist目录下的所有代码添加版权信息,也可以将npx xq-banner 命令串联到package.json的构建命令后面,构建完成后自动执行。package.json 执行构建脚本示例:{“build”:“npx unbuild && npm run convert && npm run min &&npx xq-banner”}。构建执行效果如图6所示。

执行后构建目录dist下的所有代码文件顶部都会自动添加如下的版权信息。

5 结语

本文使用NPM 模块的标准,开发了一个可以通过命令执行xq-banner 模块,该模块默认实现了将dist目录下的所有代码文件顶部自动添加版权信息,也可以通过命令行参数指定其他目录来为代码自动添加版权信息。只要安装xqbanner 模块,就能实现无需任何配置,开箱即用的效果,同时xq-banner 是一个NodeJs 命令行模块,适用于任何的前端项目,具有很强的通用性。

猜你喜欢
命令代码工具
只听主人的命令
波比的工具
波比的工具
准备工具:步骤:
创世代码
创世代码
创世代码
创世代码
移防命令下达后
“巧用”工具