首页 > 编程语言 >前端学习 node 快速入门 系列 —— 项目版权格式化

前端学习 node 快速入门 系列 —— 项目版权格式化

时间:2023-04-10 19:35:28浏览次数:47  
标签:node 格式化 入门 err filePath 版权 data const

其他章节请看:

前端学习 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,格式化,入门,err,filePath,版权,data,const
From: https://www.cnblogs.com/pengjiali/p/17304047.html

相关文章

  • 小程序入门4—钉钉群机器人消息通知和钉钉工作通知
    前言在消息通知这块,钉钉可谓是玩出了花,比如工作通知、群机器人通知,还有那万恶的Ding一下。钉钉的通知不仅花样多,而且大部分渠道都支持自定义,也即可以自定义设置发送时间、发送内容,并且还支持多种样式的消息如文本、卡片、Markdown等。这篇文章我主要介绍一下常用的两类:钉钉群机......
  • ctfshow web入门 sql注入 171-175
    171-175同属无过滤绕过(并未对sql语句过滤,仅对查询结果过滤)重点:1、了解万能密码2、了解sql语句中字符串函数3、了解备份功能(导入/导出数据)4、蚁剑如何连接数据库web171$sql="selectusername,passwordfromuserwhereusername!='flag'andid=......
  • Java入门5(多态)
    多态编译时的多态:方法重载运行时的多态:动态绑定多态的三大前提类之间要有继承关系要出现方法重写父类的引用指向了子类的对象测试样例//定义Person类publicclassPerson{publicStringname;publicStringsex;publicintage;publicPerson(St......
  • Node.js安装
    一、安装1、安装包下载https://nodejs.org/download/release/v16.20.0/2、将node-v16.20.0-linux-x64.tar.gz上传至/opt/soft目录3、解压cd/opt/soft&&tar-zxvfnode-v16.20.0-linux-x64.tar.gz-C/opt/module/4、重命名cd/opt/module&&mvnode-v16.20.0-li......
  • 快速入门
    MPP数据库是指“大规模并行处理”(MassivelyParallelProcessing)数据库,是一种用于处理大规模数据的数据库系统。它可以处理非常大的数据集并提供快速的数据访问和处理能力。核心思想是将大型数据集分解成小的数据块,并在多个计算节点上并行处理这些块。使用共享存储架构,其中多个......
  • ST入门笔记3
    ST自动控制灯模式//之前是手动的[要求]自动模式切换5s自动[配件]m1减模式不用了只需m0m2开始停止[讲解]添加定时器(条件D0=1,tc0,50)TS定时器当前值**时间继电器一定要放在if或case语句外侧,否则就会每跑一次被清零[代码](*M0启动*)IFLDP(1,M0)THEN D0:=D0+1;END_IF;(*M2stop......
  • vscode保存时自动ESLint格式化(vue)
    一、安装eslint  二、vscode全局配置2.1打开设置   2.2打开settings.json  2.3在settings.json中添加eslint配置{"code-runner.runInTerminal":true,"eslint.format.enable":true,//以下是eslint配置//vscode默认启用了根据文件......
  • 【ACM博弈论】SG函数入门(1):从巴什博奕到尼姆游戏
    在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。......
  • PYTHON 字符串格式化
    字符串的格式化字符串的格式化采用了类似于C语言的%格式化符号。>>>y,m,d=2016,7,8>>>"%d-%02d-%02d"%(y,m,d)'2016-07-08'从Python2.6开始,引入了format内置函数来实现字符串格式化,它使用花括号}和冒号:来替代百分号%。与百分号格式化相比,它的功能更加强大而灵活。1)通过......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-食谱智能生成从0到1快速入门——官网推荐的48
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......