untildify
untildify 用来把 ~/Desktop
转换为 /Users/keke/Desktop
,而 tildify 则反过来。
untildify
容易理解,通过 os.homedir()
获取 tilde 所代表的路径,然后替换即可,但需要注意一些 corner case,例如要支持 Windows 系统下的 \
路径分隔符(现在的 Windows 也支持 /
),要支持 ~
等,更完整的 corner case 可以看项目的 test.js。
untildify
的 test.js
用到一款叫 rewire 的库,它和 require
读音很似,事实上用法也完全一样,除了一个区别:
rewire acts exactly like require. With just one difference: Your module will now export a special setter and getter for private variables.
untildify
在 test.js
中使用 rewire
更改了 untildify
中的 homeDirectory
变量的值,以测试不同情况下的表现。rewire
已经不怎么维护了,但 jest 支持类似的 mock,虽然用起来没有 rewire
那么简单和直观。
tildify
tildify 和 untildify
作用相反。它用到了两个我很少用的属性或方法:
path.normalize()
:在这里主要用来转换 .
和 ..
;path.sep
:在不同的系统下可能不同(主要是 Windwos 系统),所以不能直接使用 /
;