答案是可以的。
简化一下,假设我有下面的目录结构。
添加图片注释,不超过 140 字(可选)。
第一步图示:(filterable关键字替换为空,只针对.vue文件操作)。
添加图片注释,不超过 140 字(可选)。
第二步图示:针对.vue文件的el-select标签匹配替换(即为新加属性)从而完成任务。
添加图片注释,不超过 140 字(可选)。
通过上述图示,我们发现vscode自带的搜索匹配功能,也就是做了两件事。
那我们是不是也可以使用node自己写对应功能呢?答案是肯定的。
在此之前,我们先来回顾复习一下之前的相关知识。
我们写一个函数,把字符串中的某些字符,替换成新的字符:
let str = ` 白66依山尽, 黄河66入海流, 欲穷千66里目, 更上一层66楼`/** * 一个用来在字符串中替换指定字符的函数 * @param {string} str 原来的字符串 * @param {string} targetStr 要替换的目标字符 * @param {string} replaceStr 把目标字符替换成什么字符 * @returns {string} 返回替换好的新的字符串 */function replaceAllStr(str, targetStr, replaceStr) { // 把原来的字符串 通过正则 匹配到所有的目标字符,统一替换成要替换的字符 return str.replace(new RegExp(targetStr, 'g'), replaceStr);}let newStr = replaceAllStr(str, '66', '88')console.log('原来的字符串--->', str);console.log('替换后的新字符串--->', newStr);
打印的效果图如下:
添加图片注释,不超过 140 字(可选)
// 读取对应路径下的目录,返回数组,数组中的每一项是文件夹名或文件名fs.readdirSync(path) // 读取对应路径,获取标准信息,并看看此路径是文件还是文件夹const stats = fs.statSync(path) stats.isFile()stats.isDirectory()// 同步读取文件内容,读取到的是文件中的所有字符串fs.readFileSync(filePath, 'utf-8') // 将数据内容data同步写入到file文件中去fs.writeFileSync(file, data)
// 获取文件的后缀名path.extname(file)// 把文件夹和文件拼接成标准的路径path.join(folderPath, file);
欲知更多详情如何,请访问nodejs中文网:https://nodejs.cn/api/
根据上面的两个知识点回顾,写一个递归读取文件夹中的文件函数,代码如下:
const fs = require('fs');const path = require('path');function printAllFilesInFolder(folderPath, fileSuffix = '') { const files = fs.readdirSync(folderPath); // 读取对应目录【数组,文件夹或文件】 files.forEach((file) => { // 遍历对应目录内容 const filePath = path.join(folderPath, file); // 拼成标准路径 const stats = fs.statSync(filePath); // fs模块读取此路径得到文件信息状态 if (stats.isFile() && path.extname(file) === fileSuffix) { // 若是文件且后缀名对得上 let fileStr = fs.readFileSync('./' + filePath, 'utf-8') // 就去读取这个文件的内容 console.log('--读取到文件内容为:-->', fileStr); // 最后再打印出来 } else if (stats.isDirectory()) { // 若是文件夹 printAllFilesInFolder(filePath, fileSuffix); // 文件夹就递归继续操作 } });}// 用法示例:传入文件夹路径来打印所有文件const folderPath = './page';const fileSuffix = '.vue';printAllFilesInFolder(folderPath, fileSuffix);
const fs = require('fs');const path = require('path');function replaceAllStr(str, targetStr, replaceStr) { // 把原来的字符串 通过正则 匹配到所有的目标字符,统一替换成要替换的字符 return str.replace(new RegExp(targetStr, 'g'), replaceStr);}function printAllFilesInFolder(folderPath, fileSuffix = '') { const files = fs.readdirSync(folderPath); // 读取对应目录【数组,文件夹或文件】 files.forEach((file) => { // 遍历对应目录内容 const filePath = path.join(folderPath, file); // 拼成标准路径 const stats = fs.statSync(filePath); // fs模块读取此路径得到文件信息状态 if (stats.isFile() && path.extname(file) === fileSuffix) { // 若是文件且后缀名对得上 let fileStr = fs.readFileSync('./' + filePath, 'utf-8') // 就去读取这个文件的内容 /** * 第一步,把文件中的filterable关键字字符串替换成空 * */ let newFileStr = replaceAllStr(fileStr, 'filterable', '') /** * 第二步,把文件中的el-select通过替换的方式加属性filterable * */ // let newFileStr = replaceAllStr(fileStr, '<el-select', '<el-select filterable ') fs.writeFileSync(filePath, newFileStr) // 文件更新替换 } else if (stats.isDirectory()) { // 若是文件夹 printAllFilesInFolder(filePath, fileSuffix); // 文件夹就递归继续操作 } });}// 用法示例:传入文件夹路径来打印所有文件const folderPath = './page';const fileSuffix = '.vue';printAllFilesInFolder(folderPath, fileSuffix);
为了方便大家使用,笔者把代码推到了github上去了https://github.com/shuirongshuifu/efficiencyTool3。
本文链接:http://www.28at.com/showinfo-26-45497-0.htmlNode在项目中应用案例之给几百个下拉框统一加Filterable实现可搜索
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com