<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用JavaScript實現node.js中的path.join方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:10:13
        文檔

        使用JavaScript實現node.js中的path.join方法

        使用JavaScript實現node.js中的path.join方法:Node.JS中的 path.join 非常方便,能直接按相對或絕對合并路徑,使用: path.join([path1], [path2], [...]),有時侯前端也需要這種方法,如何實現呢? 其實直接從 node.js 的 path.js 拿到源碼加工一下就可以了: 1. 將 const 等 es6 屬
        推薦度:
        導讀使用JavaScript實現node.js中的path.join方法:Node.JS中的 path.join 非常方便,能直接按相對或絕對合并路徑,使用: path.join([path1], [path2], [...]),有時侯前端也需要這種方法,如何實現呢? 其實直接從 node.js 的 path.js 拿到源碼加工一下就可以了: 1. 將 const 等 es6 屬

        Node.JS中的 path.join 非常方便,能直接按相對或絕對合并路徑,使用: path.join([path1], [path2], [...]),有時侯前端也需要這種方法,如何實現呢?

        其實直接從 node.js 的 path.js 拿到源碼加工一下就可以了:

        1. 將 const 等 es6 屬性改為 var,以便前端瀏覽器兼容
        2. 添加一個判斷路戲分隔符的變量 sep,即左斜杠還是右斜杠,以第一個路戲分隔符為準
        3. 將引用的變量和函數放到一個文件里就可以了:

        Path 的源碼: https://github.com/nodejs/node/blob/master/lib/path.js

        var CHAR_FORWARD_SLASH = 47
        var CHAR_BACKWARD_SLASH = 92
        var CHAR_DOT = 46
        function isPathSeparator(code) {
         return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
        }
        function isPosixPathSeparator(code) {
         return code === CHAR_FORWARD_SLASH;
        }
        function normalize(path) {
         if (path.length === 0)
         return '.';
         var isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
         var trailingSeparator =
         path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;
         // Normalize the path
         path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator);
         if (path.length === 0 && !isAbsolute)
         path = '.';
         if (path.length > 0 && trailingSeparator)
         path += '/';
         if (isAbsolute)
         return '/' + path;
         return path;
        }
        function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {
         var res = '';
         var lastSegmentLength = 0;
         var lastSlash = -1;
         var dots = 0;
         var code;
         for (var i = 0; i <= path.length; ++i) {
         if (i < path.length)
         code = path.charCodeAt(i);
         else if (isPathSeparator(code))
         break;
         else
         code = CHAR_FORWARD_SLASH;
         if (isPathSeparator(code)) {
         if (lastSlash === i - 1 || dots === 1) {
         // NOOP
         } else if (lastSlash !== i - 1 && dots === 2) {
         if (res.length < 2 || lastSegmentLength !== 2 ||
         res.charCodeAt(res.length - 1) !== CHAR_DOT ||
         res.charCodeAt(res.length - 2) !== CHAR_DOT) {
         if (res.length > 2) {
         const lastSlashIndex = res.lastIndexOf(separator);
         if (lastSlashIndex !== res.length - 1) {
         if (lastSlashIndex === -1) {
         res = '';
         lastSegmentLength = 0;
         } else {
         res = res.slice(0, lastSlashIndex);
         lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
         }
         lastSlash = i;
         dots = 0;
         continue;
         }
         } else if (res.length === 2 || res.length === 1) {
         res = '';
         lastSegmentLength = 0;
         lastSlash = i;
         dots = 0;
         continue;
         }
         }
         if (allowAboveRoot) {
         if (res.length > 0)
         res += `${separator}..`;
         else
         res = '..';
         lastSegmentLength = 2;
         }
         } else {
         if (res.length > 0)
         res += separator + path.slice(lastSlash + 1, i);
         else
         res = path.slice(lastSlash + 1, i);
         lastSegmentLength = i - lastSlash - 1;
         }
         lastSlash = i;
         dots = 0;
         } else if (code === CHAR_DOT && dots !== -1) {
         ++dots;
         } else {
         dots = -1;
         }
         }
         return res;
        }
        function join() {
         if (arguments.length === 0)
         return '.';
         var sep = arguments[0].indexOf('/') > -1 ? '/' : '\\'
         var joined;
         var firstPart;
         for (var i = 0; i < arguments.length; ++i) {
         var arg = arguments[i];
         if (arg.length > 0) {
         if (joined === undefined)
         joined = firstPart = arg;
         else
         joined += sep + arg;
         }
         }
         if (joined === undefined)
         return '.';
         var needsReplace = true;
         var slashCount = 0;
         if (isPathSeparator(firstPart.charCodeAt(0))) {
         ++slashCount;
         var firstLen = firstPart.length;
         if (firstLen > 1) {
         if (isPathSeparator(firstPart.charCodeAt(1))) {
         ++slashCount;
         if (firstLen > 2) {
         if (isPathSeparator(firstPart.charCodeAt(2)))
         ++slashCount;
         else {
         // We matched a UNC path in the first part
         needsReplace = false;
         }
         }
         }
         }
         }
         if (needsReplace) {
         // Find any more consecutive slashes we need to replace
         for (; slashCount < joined.length; ++slashCount) {
         if (!isPathSeparator(joined.charCodeAt(slashCount)))
         break;
         }
         // Replace the slashes if needed
         if (slashCount >= 2)
         joined = sep + joined.slice(slashCount);
         }
         return normalize(joined);
        }

        使用:

        join('../var/www', '../abc')
        > "../var/abc"
        join('../var/www', '\abc')
        ../var/www/abc

        總結

        以上所述是小編給大家介紹的使用JavaScript實現node.js中的path.join方法,希望對大家有所幫助,如果對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用JavaScript實現node.js中的path.join方法

        使用JavaScript實現node.js中的path.join方法:Node.JS中的 path.join 非常方便,能直接按相對或絕對合并路徑,使用: path.join([path1], [path2], [...]),有時侯前端也需要這種方法,如何實現呢? 其實直接從 node.js 的 path.js 拿到源碼加工一下就可以了: 1. 將 const 等 es6 屬
        推薦度:
        標簽: 方法 js javascript
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲欧洲国产成人综合在线观看 | 国产久爱免费精品视频| 69视频免费在线观看| 国产亚洲精品国看不卡| 久久午夜夜伦鲁鲁片无码免费| 久久九九久精品国产免费直播| 麻豆成人精品国产免费| 亚洲熟妇无码八V在线播放| 麻豆一区二区免费播放网站| 免费国产精品视频| 亚洲ⅴ国产v天堂a无码二区| 免费人人潮人人爽一区二区| 久久久久国产精品免费看| 成人毛片免费观看| 亚洲av无码国产精品色午夜字幕 | 久久久久高潮毛片免费全部播放| 亚洲色偷拍区另类无码专区| 国产亚洲Av综合人人澡精品| 99在线在线视频免费视频观看| 亚洲av无码专区国产乱码在线观看| 久久最新免费视频| 亚洲Av无码精品色午夜| 福利免费观看午夜体检区| 中文字幕亚洲精品无码| 一级做a爰全过程免费视频| 亚洲国色天香视频| 精品国产麻豆免费人成网站| 国产免费私拍一区二区三区| 精品熟女少妇aⅴ免费久久 | 日韩视频免费一区二区三区| 久久国产精品国产自线拍免费| 亚洲AV区无码字幕中文色 | 亚洲国产高清精品线久久| 亚洲色偷偷偷综合网| 亚洲美日韩Av中文字幕无码久久久妻妇| 国产免费久久久久久无码| 亚洲码在线中文在线观看| 99精品在线免费观看| 国产精品亚洲色婷婷99久久精品| 亚洲国产精品无码一线岛国| 亚洲人成电影网站免费|