tmodjs icon indicating copy to clipboard operation
tmodjs copied to clipboard

Nodejs path 模块返回值 Mac OSX 与 Windows 兼容方案

Open aui opened this issue 12 years ago • 3 comments

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;
})();

aui avatar Jul 31 '13 15:07 aui

不要偷懒啊,此法负作用无法估量。

TooBug avatar Aug 01 '13 01:08 TooBug

我只是包装了一层,并没有侵入真正 path,仍然使用 require('path')拿到原始 path 引用。

aui avatar Aug 01 '13 01:08 aui

但别人在维护的时候不会在同一个文件中两次引入path模块,看到引入了当然会按API去使用。 建议还是另外写个函数来处理比较好。

TooBug avatar Aug 01 '13 02:08 TooBug