windows - Har du brug for at bruge path.join i node.js?

Indlæg af Hanne Mølgaard Plasc

Problem



som alle ved, at Windows gør stier med tilbageslag, hvor Unix gør stier med skråstreger fremad. node.js giver path.join() for altid at bruge den korrekte skråstreg. Så for eksempel i stedet for at skrive Unix kun 'a/b/c' ville du gøre path.join('a','b','c') i stedet. [23]


Det ser ud til, at på trods af denne forskel, hvis du ikke normaliserer dine stier (f.eks. Ved hjælp af path.join) og bare skriver stier som a/b/c node.js ikke har noget problem med at køre dine scripts på Windows.


Så er der nogen fordel i forhold til at skrive path.join('a','b','c') over 'a/b/c'? Begge ser ud til at arbejde uanset platform ...

Bedste reference


Windows-filsystemer har ikke noget problem ved hjælp af skråstregninger fremad eller bagud som stilseparatorer (dette har været tilfældet siden tilbage i DOS-dage). Det eneste virkelige problem er, at Windows-kommandolinjeprocessorer (eller mere specifikt Windows-native kommandolinjeværktøjer) har tendens til at fortolke fremadskårne skråstreger som valgspecifikatorer i stedet for sti-komponenter. Derfor har du brug for en tilbagekoblet sti, hvis du skal overføre en sti til en Windows-kommandoen køre som en underproces. Også Windows API-opkald (og metoder fra højere niveau sprog, der kalder Windows API), der returnerer stier, bruger tilbageslag, så selvom du ikke overfører dem til delprocesser, skal du normalisere dem.

Andre referencer 1


path.join vil tage sig af unødvendige afgrænsere, der kan forekomme, hvis de givne stier kommer fra ukendte kilder (f.eks. Brugerindgang, API'er fra tredjeparter osv.).


path.join('a/','b') path.join('a/','/b'), path.join('a','b') og path.join('a','/b') vil alle give a/b.


Uden at bruge det, ville du normalt gøre forventninger om starten og slutningen af ​​stierne, der blev tilsluttet, idet de vidste, at de kun har ingen eller en skråstreg.

Andre referencer 2


Jeg bruger paths.join for at sikre mappe separatorer er på de rigtige steder, ikke nødvendigvis for at sikre, at den bruger fremad versus back skråstreger. For eksempel:


path.join("/var/www", "test")


Vil korrekt indsætte separatoren mellem www og test /var/www/test

Andre referencer 3


Kort svar:


Alle fs.* funktioner (f.eks. fs.open osv. Behandler stienavnet for dig. Så du behøver ikke bruge path.join selv og gøre din kode ulæselig.


Langt svar:


Alle fs.* funktioner kalder path.\_makeLong(path), som igen kalder path.resolve(path), som har specielle RegExps til Windows, der tager højde for backslash eller fremad skråstreger /. Du kan tjekke det selv for at se deres kildekode på:



  • [24] https://github.com/joyent/node/blob/061f2075cf81017cdb40de80533ba18746743c94/lib/fs.js#L97

  • [25] https://github.com/joyent/node/blob/061f2075cf81017cdb40de80533ba18746743c94/lib/path.js#L437

  • [26] https://github.com/joyent/node/blob/061f2075cf81017cdb40de80533ba18746743c94/lib/path.js#L85