2017-04-03 16 views
2

在我的NodeJS寫:使用...其餘ES6把論點奇怪爲了

path = 'public/MIN-1234'; 
path = path.split('/'); 
return path.join(process.cwd(), ...path); 

我想到:

c:\CODE\public/MIN-1234 

,但得到:

`‌publicC:\CODEMIN-1234` 

什麼?

+6

你正在用你的變量覆蓋模塊'path'。友情提示:總是在需求中使用'const'。 – georg

+1

Georg是正確的 - 你試圖調用[Node.js'path.join'函數](https://nodejs.org/api/path.html#path_path_join_paths),但你實際上只是調用[' Array.prototype.join'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/join)。 –

+0

@abhishekkannojia你在考慮'Array.join',而不是'path.join'。 – GPX

回答

1

在您的問題下的評論提供了一些有價值的指導,你的東西你做錯了。具體而言,您似乎認爲您使用節點的path.join(其中path是節點模塊,而path.join是有效的模塊方法),實際上,您已用路徑添加字符串覆蓋path,然後將該字符串轉換爲數組,並且誤導,還有一個具有完全不同功能的join方法。

但是,您嘗試使用ECMAScript 2015(有時縮寫爲ES6,但從未EC6)嘗試使用節點的path.join方法進行語法擴展,似乎還有一個問題。

如果你已經有一個以前有效的理由分裂在其分隔的路徑另外,你可以使用ES6休息波及到這些元素添加到路徑:

function something() { 
    const path = require('path'); 
    const myPathAddition = 'public/MIN-1234'; 
    const myPathAdditionElmts = myPathAddition.split('/'); // if you really need to do this anyway 
    return path.join(process.cwd(), ...myPathAdditionElmts); 
} 

但是,如果你已經沒有其他理由可以分開你的路徑添加,那麼不要爲了立即重新加入path.join調用中的結果段而煩惱。相反,你可以加入「聯合國分裂」原始的字符串,而無需使用傳播語法:

function something() { 
    const path = require('path'); 
    const myPathAddition = 'public/MIN-1234'; // don't bother splitting this 
    return path.join(process.cwd(), myPathAddition); // just join it as is 
} 

注意:此方法能正常工作在我的Mac終端。如果您在Windows機器上執行此操作,並且確實需要按照您的問題中的建議,在路徑段中同時使用反斜槓和前斜槓,那麼您可能需要或需要執行比我顯示的解析更多的操作以確保有效/一致/清晰的路徑語法。然而,我已經證明了使用擴展語法與path.join的必要性或缺乏的一般概念仍然有效。

+0

坦克,第一次使用'path.join'的原因是正確加入了跨操作系統的路徑(windows,linux) –