Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

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. 一点都不想弄了

 

 


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步