使用Node.js腳本自動統(tǒng)計代碼量的實現(xiàn)代碼
說在前面
在軟件開發(fā)領(lǐng)域,了解項目的代碼規(guī)模和復雜度對于項目管理、團隊協(xié)作以及技術(shù)評估都至關(guān)重要。通過統(tǒng)計項目代碼行數(shù),我們能夠更好地把握項目的整體情況,包括但不限于代碼量的大小、不同類型文件的分布情況以及項目的結(jié)構(gòu)和復雜度。這些信息對于項目負責人做出決策、開發(fā)人員進行優(yōu)化和維護、以及評估項目的進度和質(zhì)量都具有重要意義。
然而,手動統(tǒng)計代碼行數(shù)通常會耗費大量時間和精力,特別是在大型項目中。為了提高統(tǒng)計效率并減少人為錯誤,我們可以借助自動化工具來完成這項任務(wù)。本文將介紹如何使用 Node.js 腳本來自動化統(tǒng)計項目代碼行數(shù),讓我們能夠輕松快捷地獲取項目的代碼量信息,從而更好地進行項目管理和開發(fā)工作。
效果展示
實現(xiàn)代碼
1、引用依賴
fs
模塊提供了讀取文件內(nèi)容的功能;path
模塊用于處理文件路徑;@jyeontu/j-inquirer
模塊用于進行命令行交互。
2、計算指定文件的代碼行數(shù)
function countLines(filePath) { const fileContent = fs.readFileSync(filePath, "utf-8"); const lines = fileContent.split("\n"); let validLines = 0; for (const line of lines) { // 排除空行和以雙斜杠開頭的行 if (line.trim() !== "" && !line.trim().startsWith("http://")) { validLines++; } } return validLines; }
countLines
函數(shù)接收一個文件路徑作為參數(shù),讀取文件內(nèi)容并按行分割,然后通過遍歷每一行判斷是否為有效代碼行??招泻鸵噪p斜杠 //
開頭的行將被排除。
3、遍歷目錄并統(tǒng)計代碼行數(shù)的函數(shù)
function countCodeLines(dirPath, config) { const { fileType, ignoreName, maxLine } = config; let totalLines = 0; function traverseDirectory(directory) { const files = fs.readdirSync(directory); files.forEach((file) => { const filePath = path.join(directory, file); const stats = fs.statSync(filePath); if (stats.isDirectory() && !ignoreName.includes(file)) { traverseDirectory(filePath); } else if (stats.isFile() && checkEndWith(file, fileType)) { const lines = countLines(filePath); if (lines > maxLine) { maxLineMap[filePath] = lines; } const type = file.split(".")[file.split(".").length - 1]; numMap[type] = (numMap[type] || 0) + lines; totalLines += lines; } }); } traverseDirectory(dirPath); return totalLines; }
traverseDirectory
函數(shù)用于遍歷指定目錄下的所有文件和子目錄。對于每個文件,它會判斷文件類型,并統(tǒng)計所需類型的文件的代碼行數(shù)。對于子目錄,會遞歸調(diào)用自身來處理。
4、文件類型限制
我們可以通過控制臺交互來設(shè)置需要統(tǒng)計的文件類型(如vue, js, css, html, ts
)、需要忽略的目錄(如node_modules, dist
),以及行數(shù)閾值,如下圖:
遍歷文件的時候先判斷是否為我們需要統(tǒng)計的文件類型:
function checkEndWith(file, fileTypeList) { for (const fileType of fileTypeList) { if (file.endsWith("." + fileType)) return true; } return false; }
遍歷文件夾時忽略我們不需要統(tǒng)計的目錄:
if (stats.isDirectory() && !ignoreName.includes(file)) { traverseDirectory(filePath); } else if (stats.isFile() && checkEndWith(file, fileType)) { const lines = countLines(filePath); if (lines > maxLine) { maxLineMap[filePath] = lines; } const type = file.split(".")[file.split(".").length - 1]; numMap[type] = (numMap[type] || 0) + lines; totalLines += lines; }
5、交互輸入保存
我們不希望每次都要重復修改設(shè)置需要統(tǒng)計的文件類型、需要忽略的目錄以及行數(shù)閾值,所以這里加入了一個配置文件,運行腳本會讀取配置文件來設(shè)置默認值,如下圖為config.json
文件內(nèi)容
const config = require("./config.json"); const {fileType,ignoreName,maxLine} = config; const options = [ { type: "folder", message: "請選擇項目目錄:", name: "folderName", default: "", dirname: baseDir, }, { type: "input", message: `請輸入需要統(tǒng)計的文件后綴(默認為${fileType.join("、")}):`, name: "fileType", default: fileType.join("、"), }, { type: "input", message: `請輸入需要忽略的文件或目錄(默認為${ignoreName.join("、")}):`, name: "ignoreName", default: ignoreName.join("、"), }, { type: "input", message: `請輸入單文件行數(shù)閾值(默認為${maxLine}):`, name: "maxLine", default: maxLine, }, ];
交互輸入后將輸入內(nèi)容更新到配置文件中,保留最后一次交互輸入的配置
const answers = await new inquirer(options).prompt(); for (const key in answers) { if (answers[key].includes("、")) answers[key] = answers[key].split("、"); } const jsonData = JSON.stringify(answers, null, 2); // 將對象轉(zhuǎn)換為格式化的JSON字符串 try { fs.writeFileSync(path.join(__dirname, "./config.json"), jsonData, "utf-8"); } catch (err) { console.error("寫入文件時發(fā)生錯誤:", err); }
6、輸出結(jié)果
腳本會輸出每種類型文件的行數(shù)及總行數(shù),并統(tǒng)計出行數(shù)超出閾值的文件及行數(shù):
實際應用:
代碼行數(shù)統(tǒng)計在實際項目管理中有著廣泛的應用。以下是一些應用案例:
1、評估項目規(guī)模
通過統(tǒng)計代碼行數(shù),可以對項目的規(guī)模有一個大致的了解。這對于項目排期、團隊資源規(guī)劃等方面非常有幫助。
2、監(jiān)控代碼質(zhì)量
代碼行數(shù)統(tǒng)計可以作為一項質(zhì)量指標之一,用于監(jiān)控代碼的復雜性和維護難度。隨著項目的進行,代碼行數(shù)的增長趨勢可能表示需求變更頻繁或代碼冗余。
3、決策重構(gòu)和優(yōu)化
通過統(tǒng)計代碼行數(shù),可以發(fā)現(xiàn)一些代碼量過大的文件或模塊。這些地方可能需要進行重構(gòu)或優(yōu)化以提高代碼的可讀性和可維護性。
使用
該工具已經(jīng)發(fā)布到 npm 上,可以直接通過命令npm i -g jyeontu
進行安裝,安裝完后在控制臺中輸入jyeontu file
即可進行操作。選擇行數(shù)統(tǒng)計即可:
源碼
Gitee
該工具的源碼也已經(jīng)開源,有興趣的同學可以到Gitee上查看:Gitee地址;
以上就是使用Node.js腳本自動統(tǒng)計代碼量的實現(xiàn)代碼的詳細內(nèi)容,更多關(guān)于Node.js腳本自動統(tǒng)計代碼量的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
node.js使用npm 安裝插件時提示install Error: ENOENT報錯的解決方法
這篇文章主要介紹了node.js使用npm 安裝插件時提示install Error: ENOENT報錯的解決方法,需要的朋友可以參考下2014-11-11win10環(huán)境使用nvm安裝多版本nodejs并配置環(huán)境變量的完整步驟
這篇文章主要給大家介紹了關(guān)于win10環(huán)境使用nvm安裝多版本nodejs并配置環(huán)境變量的相關(guān)資料,需要的朋友可以參考下2024-01-01node 安裝 windows-build-tools全過程
這篇文章主要介紹了node 安裝 windows-build-tools全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10