使用…restES6把参数以奇怪的顺序

在nodeJS我写:

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

我期望:

  c:\CODE\public/MIN-1234 

但得到:

  `‌publicC:\CODEMIN-1234` 

什么??

您的问题下的意见提供了一些有价值的指导,你正在做的事情不正确。 具体来说,你似乎认为你正在使用节点的path.join (其中path是一个节点模块和path.join是一个有效的模块方法),实际上你已经用path添加string覆盖path ,然后将string转换为数组,其误导性地也具有完全不同function的join方法。

但是,您尝试使用ECMAScript 2015(有时缩写为ES6,但从来没有EC6)尝试使用节点的path.join方法继续扩展语法,这似乎还有一个问题。

如果你以前有一个合理的理由来在你的分隔符上分割你的path,那么你可以使用ES6 rest spread将这些元素添加到path中:

 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,那么不要为了立即在path.join调用中重新join结果段而path.join 。 相反,您可以join“未拆分”的原始string,而无需使用扩展语法:

 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 } 

注意:这个解决scheme在我的Macterminal中工作正常。 如果你在Windows机器上这样做,并且确实需要在你的问题中build议的path段中使用反斜线和正斜杠,那么你可能需要或者需要做比我更多的parsing以确保有效/一致/清晰的path语法。 然而,我已经certificate了在path.join使用扩展语法的一般概念仍然有效。