justin-zhengyi-wu / blogs

My Blogs
http://blog.justin4u.com/
4 stars 0 forks source link

Node-walkdir在Mac上的一个坑 #20

Open justin-zhengyi-wu opened 10 years ago

justin-zhengyi-wu commented 10 years ago

Node-walkdir在Mac上的一个坑

最近使用一个node package名为walkdir时碰到一个坑。这个包是用来做路径树游走的,可以递归任意层的路径树。

在测试中发现,下面这两端代码输出是不一样的:

代码一:

var walk = require('./walkdir');
walk('/tmp', function(path, stat) {
    console.log(path);
});

代码二:

var walk = require('./walkdir');
walk('/tmp/', function(path, stat) {
    console.log(path);
});

为什么呢?我一度以为这是walkdir的一个bug。后深究其源代码发现,它是调用的fs.lstat。而Node文档中说fs.lstat与fs.stat的唯一区别是前者在碰到目标路径为符合链接(symbolic link)时,只会查看/计算链接自身,而不是链接所指向的文件(夹)。

不幸的是我使用和测试的环境是MacOS,通过ls -l /tmp发现它只是一个链接,指向的是/private/tmp。

我最后做了两个测试印证了这个事实:

  1. 更改测试目的路径为一个非链接的地址,发现上面的两段代码运行结果是一样的。
  2. 在一台Linux系统(/tmp目录不是链接)下跑测试,发现上面的两段运行结果也是一样的。