其他章节请看:

前端学习 node 快速入门 系列

项目版权格式化

需求

替换整个项目的版权信息,替换文件为 .c 和 .h 结尾。

分析

版权信息通常都在文件开头,通过是否有 copyright 来判断是替换版权还是新增版权

实现

通过 node 读取文件,过滤出 .c、.h 文件,然后用正则判断是替换版权还是新增。代码如下:

const fs = require('fs');
const path = require('path');
function walkSync(currentDirPath, callback) {
fs.readdirSync(currentDirPath, { withFileTypes: true }).forEach(function (dirent) {
var filePath = path.join(currentDirPath, dirent.name);
if (dirent.isFile()) {
callback(filePath, dirent);
} else if (dirent.isDirectory()) {
walkSync(filePath, callback);
}
});
} const dir = 'c-project';
walkSync(dir, function (filePath, stat) {
// 输出特定文件: .c
const fileList = ['.c', '.h'];
// 取得文件后缀
const extname = path.extname(filePath)
if (!fileList.includes(extname)) {
return
}
formatFile(filePath)
}); // 格式化文件
function formatFile(filePath) {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) throw err;
// 新的版权信息
const copyright =
`/*
* 1
* 2
* COPYRIGHT ph
* 4
* 5
*/
`
if ((/^(\s|\r|\n)*(\/\*)((\s|.|\r|\n)*?)(\*\/)/im).test(data)) {
data = data.replace(/^(\s|\r|\n)*(\/\*)((\s|.|\r|\n)*?)(\*\/)/im, copyright)
} else {
data = copyright + data
} fs.writeFile(filePath, data, (err) => {
if (err) throw err;
console.log('The file has been saved!');
}); });
console.log(filePath)
}

Tip:正则表达式可以通过可视化工具帮助理解,例如这个

笔者最初使用的正则表达式是第一个,结果处理项目时迟迟不能结束,换成第二个只花费了几秒钟就处理完成。

乱码

批量处理完成后,合并代码前发现有几个文件出现黑桃A的乱码,按照我的程序,不应该匹配,甚至修改。

以为是node读写文件字符编码设置不对,甚至在 linux 中执行 node。最后发现直接通过 vscode 手动修改版权,保存后提交仍旧在该文件其他地方出现黑桃A的乱码。

在vscode 中搜索出有黑桃A乱码的共8个文件,node 程序过滤掉它们,直接交给c语言项目开发同学手动替换版权。

其他章节请看:

前端学习 node 快速入门 系列

前端学习 node 快速入门 系列 —— 项目版权格式化的更多相关文章

  1. 前端学习 node 快速入门 系列 —— 初步认识 node

    其他章节请看: 前端学习 node 快速入门 系列 初步认识 node node 是什么 node(或者称node.js)是 javaScript(以下简称js) 运行时的一个环境.不是一门语言. 以 ...

  2. 前端学习 node 快速入门 系列 —— npm

    其他章节请看: 前端学习 node 快速入门 系列 npm npm 是什么 npm 是 node 的包管理器,绝大多数 javascript 相关的包都放在 npm 上. 所谓包,就是别人提供出来供他 ...

  3. 前端学习 node 快速入门 系列 —— 模块(module)

    其他章节请看: 前端学习 node 快速入门 系列 模块(module) 模块的导入 核心模块 在 初步认识 node 这篇文章中,我们在读文件的例子中用到了 require('fs'),在写最简单的 ...

  4. 前端学习 node 快速入门 系列 —— 报名系统 - [express]

    其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...

  5. 前端学习 node 快速入门 系列 —— 简易版 Apache

    其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...

  6. 前端学习 node 快速入门 系列 —— 服务端渲染

    其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...

  7. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(上)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(上) 前面我们已经学习了一个成熟的脚手架(vue-cli),笔者希望通过这个脚手架快速搭建系统(或项目).而展开搭建最好 ...

  8. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...

  9. vue 快速入门 系列 —— Vue(自身) 项目结构

    其他章节请看: vue 快速入门 系列 Vue(自身) 项目结构 前面我们已经陆续研究了 vue 的核心原理:数据侦测.模板和虚拟 DOM,都是偏底层的.本篇将和大家一起来看一下 vue 自身这个项目 ...

  10. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

随机推荐

  1. 到底什么样的 Java 项目用 Solon 好???

    什么样的 Java 项目用 Solon 好 就像华为讲的,不要因为爱国而特意买华为手机.Solon 也是,有需要就用不需要就跳过(按正常的需求选择): 信创需要国产化,应该用 Solon 或者 Sol ...

  2. 浏览器兼容 : IE 5 到 IE 9

    <!--[if IE]> <link href="ie.css" rel="stylesheet"> <![endif]--> ...

  3. WebApi的输出结果重写 OnActionExecuted

    public override void OnActionExecuted(ActionExecutedContext context) { if (context.Exception != null ...

  4. Git-历史版本切换-log-reset

  5. [转帖]WinXP添加TLS1.1、TLS1.2支持

    现象 HTTPS服务在Win7及Win10能够正常打开,但是在XP下用IE浏览器却无法打开,XP下用第三方浏览器(我试了谷歌浏览器)却能正常打开.经过抓包分析,用IE浏览器是协商用的是TLS1而用第三 ...

  6. [转帖]数据库连接池选型 Druid vs HikariCP性能对比

    这里主要比较HikariCP 和阿里的Druid springboot 现在官方默认的数据库连接池是 HikariCP,HikariCP的性能从测试的数据上来看也是最高的. 先来看下这个著名的issu ...

  7. [转帖]使用 TiUP 部署 TiDB 集群

    https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup TiUP 是 TiDB 4.0 版本引入的集群运维工具 ...

  8. [转帖]内存随机访问也比顺序慢,带你深入理解内存IO过程

    https://zhuanlan.zhihu.com/p/86513504 平时大家都知道内存访问很快,今天来让我们来思考两个问题: 问题1: 内存访问一次延时到底是多少?你是否会进行大概的估算? 例 ...

  9. [转帖]Unixbench服务器综合性能测试方法及工具下载

    UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具. UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU ...

  10. vue过滤器(filter)的使用

    过滤器分全局过滤器和局部过滤器 <div id="app"> <p>电脑价格:{{price | addPriceIcon}}</p> < ...