在编写node程序的时候,经常会遇到的问题是path.resolve或者relative方法返回的结果在linux和windows下不一样。linux返回的路径分隔符是左斜杠(/),而windows返回的路径分隔符是右斜杠(\\)。 大部分情况下,我们不需要做额外的处理,各自维护自己的路径
在编写node程序的时候,经常会遇到的问题是path.resolve或者relative方法返回的结果在linux和windows下不一样。linux返回的路径分隔符是左斜杠(/),而windows返回的路径分隔符是右斜杠(\\)。
大部分情况下,我们不需要做额外的处理,各自维护自己的路径格式即可,程序本身不需要关心返回的路径格式。但是在调用一些其他模块的时候,可能会遇到这样的问题。
分隔符本来也不是什么大问题,但肯定不是简单的字符串替换能解决的。比如,我们需要将windows下拿到的路径转换成linux下的路径。
D:\\desktop\\dev\\workspace\\k2\\seed\\seed.js
第一反应是使用replace来解决
'D:\\desktop\\dev\\workspace\\k2\\seed\\seed.js'.replace(/\\/g, '/')
其实在写上面的代码的时候,你已经意识到问题了,反斜杠(\\)在字符串中是作为转义符存在的,而“\\”这样才能表示一个正常的反斜杠字符。
似乎,从javascript本身很难找到解决方案,还是看看node文档上有没有相关的解决方案吧。
我们在path中可以看到一个path.sep属性,看例子也很普通,感觉可以不用,直接用javascript语言本身的特性也能解决,但是在我们遇到的这个问题上,这个属性应该是唯一的解决方案了。
比较推荐的方式是使用path.sep来代替正则的匹配,主要作用是保证代码兼容性的同时也增加代码的可读性,不需要考虑系统版本。
'D:\\desktop\\dev\\workspace\\k2\\seed\\seed.js'.split(path.sep).join('/');
当然,看了下python等语言也有类似的属性,对于后端来说可能是比较熟悉了。我就仅仅记录下,防止忘记。