和上一篇同样的适用范围,直接上代码:
<?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下执行就可以了。
评论0
暂时没有评论