Node.js 小工具—— CSS 基本语法检查

Node.js 小工具之后,基于 csslint 写了个超简单的 CSS 语法校验工具。


思路:


递归查找目录下的 css 文件,首先去除文件路径以 svn 开头的,然后选择以 css 结尾的文件。


将查找到的文件路径保存到变量中。


对保存的文件路径依次使用 exec 执行 csslint 命令,由于 exec 只有在异步执行中才可获取执行结果,因此每次执行的结果都进行了读写文件的操作。


读取文件中的内容,把原有内容加上执行的结果再写入到文件中去。


代码:


var fs = require(‘fs’),
exec = require(“child_process”).exec;

var getAllFiles = function (root){
var res = [],
files = fs.readdirSync(root);

files.forEach(function(file){
var pathname = root+’/‘+file,
stat = fs.lstatSync(pathname);

if (!stat.isDirectory()){
if (root.indexOf(“svn”) < 0 && file.indexOf(“.css”) > -1) {
res.push(pathname);
}
} else {
res = res.concat(getAllFiles(pathname));
}
});

return res;
}

var checkCSS = function (files) {
fs.writeFileSync(“error.txt”, “”, “UTF-8”);

for (var i = 0; i < files.length; i++) {
exec(“csslint –errors=duplicate-properties,known-properties,empty-rules “ + files[i], function (error, stdout, stdoutError) {
var file = fs.readFileSync(“error.txt”, “UTF-8”);
fs.writeFileSync(“error.txt”, file + “\n” + stdout, “UTF-8”);
});
}
}

checkCSS(getAllFiles(“themes”));
checkCSS(getAllFiles(“js”));

改进:


回过头来看下以上代码,貌似可以改进的地方还很多。文件多次读写;在执行命令时的循环可以省略,把其放到 getAllFiles 方法调用之类的。由于初识 Node.js,其中文件读写还研究不深,什么 open,close 都没有用,直接来硬的了 ^^


可是我说服了我自己不用去优化了,哇咔咔。
充足的理由如下:


1. 要下班了,需要把手头上的工作完结下。


2. 晚上回去还要撸


3. 周末还要弄 B3log Symphony


4. 这个东西完全不需要性能,每周能运行上一次就不错了。一次就花个1、2 分钟,我完全没有怨言


5. 一点都不想弄了