Open justin-zhengyi-wu opened 10 years ago
最近使用一个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。
我最后做了两个测试印证了这个事实:
Node-walkdir在Mac上的一个坑
最近使用一个node package名为walkdir时碰到一个坑。这个包是用来做路径树游走的,可以递归任意层的路径树。
在测试中发现,下面这两端代码输出是不一样的:
代码一:
代码二:
为什么呢?我一度以为这是walkdir的一个bug。后深究其源代码发现,它是调用的fs.lstat。而Node文档中说fs.lstat与fs.stat的唯一区别是前者在碰到目标路径为符合链接(symbolic link)时,只会查看/计算链接自身,而不是链接所指向的文件(夹)。
不幸的是我使用和测试的环境是MacOS,通过ls -l /tmp发现它只是一个链接,指向的是/private/tmp。
我最后做了两个测试印证了这个事实: