和上一篇同样的适用范围,直接上代码:

<?php

/**

  • 递归扫描目录及子目录,查找所有.vue文件
  • @param string $dir 要扫描的目录
  • @return array 找到的.vue文件路径数组
    */

function scanVueFiles($dir) {

$vueFiles = array();
$dirContent = scandir($dir);

foreach ($dirContent as $item) {
    // 跳过当前目录和父目录的引用
    if ($item == '.' || $item == '..') {
        continue;
    }
    
    $path = $dir . DIRECTORY_SEPARATOR . $item;
    
    // 如果是目录,递归扫描
    if (is_dir($path)) {
        $vueFiles = array_merge($vueFiles, scanVueFiles($path));
    } 
    // 如果是.vue文件,添加到结果数组
    elseif (pathinfo($path, PATHINFO_EXTENSION) == 'vue') {
        $vueFiles[] = $path;
    }
}

return $vueFiles;

}

/**

  • 移除Vue文件中的所有注释
  • @param string $content Vue文件内容
  • @return string 移除注释后的内容
    */

function removeVueComments($content) {

// 移除HTML注释 <!-- ... -->
$content = preg_replace('/<!--[\s\S]*?-->/', '', $content);

// 移除JavaScript和CSS的多行注释 /* ... */
// 使用正则表达式处理多行注释,注意处理包含*/的情况
$content = preg_replace('/\/\*[\s\S]*?\*\//', '', $content);

// 移除JavaScript单行注释 // ...
// 注意避免匹配到URL中的//
$content = preg_replace('/(?<!:)\/\/.*$/' , '', $content);

return $content;

}

/**

  • 处理所有找到的Vue文件,移除注释
  • @param array $vueFiles Vue文件路径数组
  • @param bool $backup 是否创建备份文件
    */

function processVueFiles($vueFiles, $backup = true) {

foreach ($vueFiles as $file) {
    echo "处理文件: $file\n";
    
    // 读取文件内容
    $content = file_get_contents($file);
    if ($content === false) {
        echo "警告: 无法读取文件 $file\n";
        continue;
    }
    
    // 移除注释
    $newContent = removeVueComments($content);
    
    // 如果内容有变化才进行操作
    if ($newContent !== $content) {
        // 创建备份文件
        if ($backup && !file_exists($file . '.bak')) {
            if (!copy($file, $file . '.bak')) {
                echo "警告: 无法创建备份文件 $file.bak\n";
                continue;
            }
        }
        
        // 写入处理后的内容
        if (file_put_contents($file, $newContent) === false) {
            echo "警告: 无法写入文件 $file\n";
        } else {
            echo "成功处理文件: $file\n";
        }
    } else {
        echo "文件没有注释,无需处理: $file\n";
    }
}

}

// 主程序
if (php_sapi_name() !== 'cli') {

die("请在命令行下运行此脚本\n");

}

// 获取当前目录
$currentDir = getcwd();

echo "开始扫描目录: $currentDir 及其子目录中的.vue文件...\n";

// 扫描所有.vue文件
$vueFiles = scanVueFiles($currentDir);

if (empty($vueFiles)) {

echo "未找到任何.vue文件\n";
exit;

}

echo "找到 " . count($vueFiles) . " 个.vue文件,准备处理...\n";

// 处理所有Vue文件,默认创建备份
processVueFiles($vueFiles);

echo "处理完成\n";
?>

CLI下执行就可以了。