最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Node.js腳本自動統(tǒng)計代碼量的實現(xiàn)代碼

 更新時間:2023年12月08日 08:48:47   作者:JYeontu  
手動統(tǒng)計代碼行數(shù)通常會耗費大量時間和精力,為了提高統(tǒng)計效率并減少人為錯誤,我們可以借助自動化工具來完成這項任務,本文將介紹如何使用 Node.js 腳本來自動化統(tǒng)計項目代碼行數(shù),讓我們能夠輕松快捷地獲取項目的代碼量信息,需要的朋友可以參考下

說在前面

在軟件開發(fā)領域,了解項目的代碼規(guī)模和復雜度對于項目管理、團隊協(xié)作以及技術(shù)評估都至關(guān)重要。通過統(tǒng)計項目代碼行數(shù),我們能夠更好地把握項目的整體情況,包括但不限于代碼量的大小、不同類型文件的分布情況以及項目的結(jié)構(gòu)和復雜度。這些信息對于項目負責人做出決策、開發(fā)人員進行優(yōu)化和維護、以及評估項目的進度和質(zhì)量都具有重要意義。

然而,手動統(tǒng)計代碼行數(shù)通常會耗費大量時間和精力,特別是在大型項目中。為了提高統(tǒng)計效率并減少人為錯誤,我們可以借助自動化工具來完成這項任務。本文將介紹如何使用 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、文件類型限制

我們可以通過控制臺交互來設置需要統(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、交互輸入保存

我們不希望每次都要重復修改設置需要統(tǒng)計的文件類型、需要忽略的目錄以及行數(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腳本示例代碼

    命令行批量截圖Node腳本示例代碼

    這篇文章主要給大家介紹了關(guān)于命令行批量截圖Node腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-01-01
  • Node.js制作簡單聊天室

    Node.js制作簡單聊天室

    這篇文章主要為大家詳細介紹了Node.js制作簡單聊天室的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • node.js中的fs.readlink方法使用說明

    node.js中的fs.readlink方法使用說明

    這篇文章主要介紹了node.js中的fs.readlink方法使用說明,本文介紹了fs.readlink方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 詳解node.js搭建代理服務器請求數(shù)據(jù)

    詳解node.js搭建代理服務器請求數(shù)據(jù)

    本篇文章主要介紹了詳解node.js搭建代理服務器請求數(shù)據(jù),具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • 深入理解Node.js中import.meta的使用

    深入理解Node.js中import.meta的使用

    import.meta提供模塊的上下文信息,如文件URL、解析模塊路徑、判斷模塊是否為入口等,本文就來介紹一下Node.js中import.meta的使用,具有一定的參考價值,感興趣的可以了解一下
    2026-01-01
  • nodejs中方法和模塊用法示例

    nodejs中方法和模塊用法示例

    這篇文章主要介紹了nodejs中方法和模塊用法,結(jié)合實例形式分析了nodejs方法與模塊的定義及使用方法,需要的朋友可以參考下
    2018-12-12
  • Node.js的cross-env工具包使用介紹

    Node.js的cross-env工具包使用介紹

    這篇文章主要為大家介紹了Node.js的cross-env工具包使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Koa從零搭建到Api實現(xiàn)項目的搭建方法

    Koa從零搭建到Api實現(xiàn)項目的搭建方法

    這篇文章主要介紹了Koa從零搭建到Api實現(xiàn)項目的搭建方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 詳解基于node的前端項目編譯時內(nèi)存溢出問題

    詳解基于node的前端項目編譯時內(nèi)存溢出問題

    本篇文章主要介紹了基于node的前端項目編譯時內(nèi)存溢出問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • koa+jwt實現(xiàn)token驗證與刷新功能

    koa+jwt實現(xiàn)token驗證與刷新功能

    這篇文章主要介紹了koa+jwt實現(xiàn)token驗證與刷新功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05

最新評論

平果县| 应城市| 磐石市| 常州市| 金昌市| 阳新县| 美姑县| 通渭县| 繁昌县| 会同县| 雷山县| 筠连县| 永定县| 开远市| 连山| 修武县| 广安市| 南木林县| 塘沽区| 河北区| 佛教| 黔南| 乐至县| 凤山县| 十堰市| 巢湖市| 行唐县| 敦煌市| 兴义市| 南阳市| 锡林浩特市| 中宁县| 美姑县| 鱼台县| 太和县| 都安| 商城县| 汉沽区| 麻栗坡县| 凤庆县| 胶州市|