tmodjs
tmodjs copied to clipboard
Nodejs path 模块返回值 Mac OSX 与 Windows 兼容方案
Mac OS X 与 Windows 使用 NodeJS path 模块返回的字符串并不一致,它只会根据系统的规范返回路径分割符号,如 Mac OS X 是/,Windows 是\ 。这种差异将导致不同平台编译后的模板 id 不一致,由于 path 方法在模板编译器中被大量使用,手工替换麻烦,直接对 path 改造一番来的更彻底。
var path = require('path');
(function () {
if (!/\\/.test(path.resolve())) {
return path;
}
var oldPath = path;
var newPath = Object.create(oldPath);
var proxy = function (name) {
return function () {
var value = oldPath[name].apply(oldPath, arguments);
if (typeof value === 'string') {
value = value.split(oldPath.sep).join('/');
}
return value;
}
};
for (var name in newPath) {
if (typeof oldPath[name] === 'function') {
newPath[name] = proxy(name);
}
};
path = newPath;
})();
不要偷懒啊,此法负作用无法估量。
我只是包装了一层,并没有侵入真正 path,仍然使用 require('path')拿到原始 path 引用。
但别人在维护的时候不会在同一个文件中两次引入path模块,看到引入了当然会按API去使用。 建议还是另外写个函数来处理比较好。