PHP去除工程目录中所有文件中的JS注释的脚本
实现
项目开发结束后,一定会有人向你索要源代码,而作为大龄程序员,要保障自己的权益,就需要在代码上做一些保护,最简单的就是在上交的代码中,把注释去掉,从而增加后来人的维护难度。
这里使用PHP实现:
<?php
// 目标文件
$targetFolderPath = 'src';
// 要排除的文件名
$excludeFiles = [
'const.js'
];
// 删除注释
function removeJsComments($jsCode) {
// 定义需要被替换的模式
$patterns = array(
// 单行注释
'/\/\/.*/' => '',
// 多行注释
'/\/\\*(.|[\r\n])*?\\*\//' => ''
);
return preg_replace(array_keys($patterns), array_values($patterns), $jsCode);
}
// 读取文件内容并去除空白行
function removeEmptyLines($filename) {
$content = file($filename);
foreach ($content as $key => &$line) {
if (trim($line) === '') {
unset($content[$key]);
} else {
// 不删除行两侧的空格
// $line = trim($line)."\n";
}
}
unset($line);
// 将处理后的内容写入原始文件
file_put_contents($filename, implode('', $content));
}
// 遍历目录 获取目录中所有文件路径
$resultPath = array();
function traverseDirectory($directory, $excludeFiles) {
$files = scandir($directory);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
// 获取纯文件名
$filePureName = basename($file);
// 如果文件名在排除的目录之中 则进入下一次循环
if(in_array($filePureName, $excludeFiles)) {
continue;
}
$path = $directory . '/' . $file;
if (is_dir($path)) {
traverseDirectory($path, $excludeFiles);
} else {
// 处理文件
array_push($GLOBALS['resultPath'], $path);
}
}
}
traverseDirectory($targetFolderPath, $excludeFiles);
// var_dump($resultPath);
foreach($resultPath as $filePath) {
$content = file_get_contents($filePath);
$resultContent = removeJsComments($content);
file_put_contents($filePath, $resultContent);
removeEmptyLines($filePath);
echo "{$filePath} done";
echo "<br>";
}
echo "<hr>";
echo "all done";
大家可以根据需要复制到本地进行修改后使用。