Rumah hujung hadapan web tutorial js Node.js中路径处理模块path的介绍

Node.js中路径处理模块path的介绍

Jun 30, 2018 am 10:07 AM
node nodejs path modul laluan modul laluan modul

这篇文章主要介绍了关于Node.js中路径处理模块path的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

相信大家都知道在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。因为部分文档说的不够清晰,还有部分因为接口的平台差异性。本文就给大家详细介绍下关于Node.js中的路径处理模块path,希望能对大家学习或者使用模块path有所帮助,下面来一起看看吧。

前言

在node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性,将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。下面我们就来详细介绍下关于Node.js中的路径处理模块path。

获取路径/文件名/扩展名

     获取路径:path.dirname(filepath)<br>

     获取文件名:path.basename(filepath)<br>

     获取扩展名:path.extname(filepath)<br>

获取所在路径

例子如下:

var path = require(&#39;path&#39;);
var filepath = &#39;/tmp/demo/js/test.js&#39;;

// 输出:/tmp/demo/js
console.log( path.dirname(filepath) );
Salin selepas log masuk

获取文件名

严格意义上来说,path.basename(filepath) 只是输出路径的最后一部分,并不会判断是否文件名。

但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。

var path = require(&#39;path&#39;);

// 输出:test.js
console.log( path.basename(&#39;/tmp/demo/js/test.js&#39;) );

// 输出:test
console.log( path.basename(&#39;/tmp/demo/js/test/&#39;) );

// 输出:test
console.log( path.basename(&#39;/tmp/demo/js/test&#39;) );
Salin selepas log masuk

如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。

// 输出:test
console.log( path.basename(&#39;/tmp/demo/js/test.js&#39;, &#39;.js&#39;) );
Salin selepas log masuk

获取文件扩展名

简单的例子如下:

var path = require(&#39;path&#39;);
var filepath = &#39;/tmp/demo/js/test.js&#39;;

// 输出:.js
console.log( path.extname(filepath) );
Salin selepas log masuk

更详细的规则是如下:(假设 path.basename(filepath) === B

从B的最后一个.开始截取,直到最后一个字符。

如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。

直接看官方文档的例子

path.extname(&#39;index.html&#39;)
// returns &#39;.html&#39;

path.extname(&#39;index.coffee.md&#39;)
// returns &#39;.md&#39;

path.extname(&#39;index.&#39;)
// returns &#39;.&#39;

path.extname(&#39;index&#39;)
// returns &#39;&#39;

path.extname(&#39;.index&#39;)
// returns &#39;&#39;
Salin selepas log masuk

路径组合

path.join([...paths])
path.resolve([...paths])
Salin selepas log masuk

path.join([...paths])

把paths拼起来,然后再normalize一下。这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。

例子如下:

var path = require(&#39;path&#39;);

// 输出 &#39;/foo/bar/baz/asdf&#39;
path.join(&#39;/foo&#39;, &#39;bar&#39;, &#39;baz/asdf&#39;, &#39;quux&#39;, &#39;..&#39;);
Salin selepas log masuk

path定义的伪代码如下:

module.exports.join = function(){
 var paths = Array.prototye.slice.call(arguments, 0);
 return this.normalize( paths.join(&#39;/&#39;) );
};
Salin selepas log masuk

path.resolve([...paths])

这个接口的说明有点啰嗦。你可以想象现在你在shell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。

比如 path.resolve(&#39;/foo/bar&#39;, &#39;./baz&#39;) 可以看成下面命令的结果

cd /foo/bar
cd ./baz
Salin selepas log masuk

更多对比例子如下:

var path = require(&#39;path&#39;);

// 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve(&#39;&#39;) )

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve(&#39;.&#39;) )

// 输出 /foo/bar/baz
console.log( path.resolve(&#39;/foo/bar&#39;, &#39;./baz&#39;) );

// 输出 /foo/bar/baz
console.log( path.resolve(&#39;/foo/bar&#39;, &#39;./baz/&#39;) );

// 输出 /tmp/file
console.log( path.resolve(&#39;/foo/bar&#39;, &#39;/tmp/file/&#39;) );

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js
console.log( path.resolve(&#39;www&#39;, &#39;js/upload&#39;, &#39;../mod.js&#39;) );
Salin selepas log masuk

路径解析

path.parse(path)

path.normalize(filepath)

从官方文档的描述来看,path.normalize(filepath) 应该是比较简单的一个API,不过用起来总是觉得没底。

为什么呢?API说明过于简略了,包括如下:

如果路径为空,返回.,相当于当前的工作路径。

将对路径中重复的路径分隔符(比如linux下的/)合并为一个。

对路径中的.、..进行处理。(类似于shell里的cd ..)

如果路径最后有/,那么保留该/。

感觉stackoverflow上一个兄弟对这个API的解释更实在,原文链接。

In other words, path.normalize is "What is the shortest path I can take that will take me to the same place as the input"
Salin selepas log masuk

代码示例如下。建议读者把代码拷贝出来运行下,看下实际效果。

var path = require(&#39;path&#39;);
var filepath = &#39;/tmp/demo/js/test.js&#39;;

var index = 0;

var compare = function(desc, callback){
 console.log(&#39;[用例%d]:%s&#39;, ++index, desc);
 callback();
 console.log(&#39;\n&#39;);
};

compare(&#39;路径为空&#39;, function(){
 // 输出 .
 console.log( path.normalize(&#39;&#39;) );
});

compare(&#39;路径结尾是否带/&#39;, function(){
 // 输出 /tmp/demo/js/upload
 console.log( path.normalize(&#39;/tmp/demo/js/upload&#39;) );

 // /tmp/demo/js/upload/
 console.log( path.normalize(&#39;/tmp/demo/js/upload/&#39;) );
});

compare(&#39;重复的/&#39;, function(){
 // 输出 /tmp/demo/js
 console.log( path.normalize(&#39;/tmp/demo//js&#39;) );
});

compare(&#39;路径带..&#39;, function(){
 // 输出 /tmp/demo/js
 console.log( path.normalize(&#39;/tmp/demo/js/upload/..&#39;) );
});

compare(&#39;相对路径&#39;, function(){
 // 输出 demo/js/upload/
 console.log( path.normalize(&#39;./demo/js/upload/&#39;) );

 // 输出 demo/js/upload/
 console.log( path.normalize(&#39;demo/js/upload/&#39;) );
});

compare(&#39;不常用边界&#39;, function(){
 // 输出 ..
 console.log( path.normalize(&#39;./..&#39;) );

 // 输出 ..
 console.log( path.normalize(&#39;..&#39;) );

 // 输出 ../
 console.log( path.normalize(&#39;../&#39;) );

 // 输出 /
 console.log( path.normalize(&#39;/../&#39;) );
 
 // 输出 /
 console.log( path.normalize(&#39;/..&#39;) );
});
Salin selepas log masuk

文件路径分解/组合

path.format(pathObject) :将pathObject的root、dir、base、name、ext属性,按照一定的规则,组合成一个文件路径。

path.parse(filepath) path.format()方法的反向操作。

我们先来看看官网对相关属性的说明。

首先是linux下

┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" / home/user/dir / file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)
Salin selepas log masuk

然后是windows下

┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" C:\  path\dir \ file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)
Salin selepas log masuk

path.format(pathObject)

阅读相关API文档说明后发现,path.format(pathObject)中,pathObject的配置属性是可以进一步精简的。

根据接口的描述来看,以下两者是等价的。

root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。

base vs name+ext:两者可以互相替换。

var path = require(&#39;path&#39;);

var p1 = path.format({
 root: &#39;/tmp/&#39;, 
 base: &#39;hello.js&#39;
});
console.log( p1 ); // 输出 /tmp/hello.js

var p2 = path.format({
 dir: &#39;/tmp&#39;, 
 name: &#39;hello&#39;,
 ext: &#39;.js&#39;
});
console.log( p2 ); // 输出 /tmp/hello.js
Salin selepas log masuk

path.parse(filepath)

path.format(pathObject) 的反向操作,直接上官网例子。

四个属性,对于使用者是挺便利的,不过path.format(pathObject) 中也是四个配置属性,就有点容易搞混。

path.parse(&#39;/home/user/dir/file.txt&#39;)
// returns
// {
// root : "/",
// dir : "/home/user/dir",
// base : "file.txt",
// ext : ".txt",
// name : "file"
// }
Salin selepas log masuk

获取相对路径

接口:path.relative(from, to)

描述:从from路径,到to路径的相对路径。

边界:

如果from、to指向同个路径,那么,返回空字符串。

如果from、to中任一者为空,那么,返回当前工作路径。

上例子:

var path = require(&#39;path&#39;);

var p1 = path.relative(&#39;/data/orandea/test/aaa&#39;, &#39;/data/orandea/impl/bbb&#39;);
console.log(p1); // 输出 "../../impl/bbb"

var p2 = path.relative(&#39;/data/demo&#39;, &#39;/data/demo&#39;);
console.log(p2); // 输出 ""

var p3 = path.relative(&#39;/data/demo&#39;, &#39;&#39;);
console.log(p3); // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"
Salin selepas log masuk

平台相关接口/属性

以下属性、接口,都跟平台的具体实现相关。也就是说,同样的属性、接口,在不同平台上的表现不同。

path.posix:path相关属性、接口的linux实现。

path.win32:path相关属性、接口的win32实现。

path.sep:路径分隔符。在linux上是/,在windows上是``。

path.delimiter:path设置的分割符。linux上是:,windows上是;。

注意,当使用 path.win32 相关接口时,参数同样可以使用/做分隔符,但接口返回值的分割符只会是``。

直接来例子更直观。

> path.win32.join(&#39;/tmp&#39;, &#39;fuck&#39;)
&#39;\\tmp\\fuck&#39;
> path.win32.sep
&#39;\\&#39;
> path.win32.join(&#39;\tmp&#39;, &#39;demo&#39;)
&#39;\\tmp\\demo&#39;
> path.win32.join(&#39;/tmp&#39;, &#39;demo&#39;)
&#39;\\tmp\\demo&#39;
Salin selepas log masuk

path.delimiter

linux系统例子:

console.log(process.env.PATH)
// &#39;/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin&#39;

process.env.PATH.split(path.delimiter)
// returns [&#39;/usr/bin&#39;, &#39;/bin&#39;, &#39;/usr/sbin&#39;, &#39;/sbin&#39;, &#39;/usr/local/bin&#39;]
Salin selepas log masuk

windows系统例子:

console.log(process.env.PATH)
// &#39;C:\Windows\system32;C:\Windows;C:\Program Files\node\&#39;

process.env.PATH.split(path.delimiter)
// returns [&#39;C:\\Windows\\system32&#39;, &#39;C:\\Windows&#39;, &#39;C:\\Program Files\\node\\&#39;]
Salin selepas log masuk

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Vuex管理登录的状态解析

关于vue解决跨域路由冲突问题的思路

Atas ialah kandungan terperinci Node.js中路径处理模块path的介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara nodejs dan tomcat Perbezaan antara nodejs dan tomcat Apr 21, 2024 am 04:16 AM

Perbezaan utama antara Node.js dan Tomcat ialah: Runtime: Node.js adalah berdasarkan masa jalan JavaScript, manakala Tomcat ialah bekas Java Servlet. Model I/O: Node.js menggunakan model tidak menyekat tak segerak, manakala Tomcat menyekat segerak. Pengendalian konkurensi: Node.js mengendalikan konkurensi melalui gelung peristiwa, manakala Tomcat menggunakan kumpulan benang. Senario aplikasi: Node.js sesuai untuk aplikasi masa nyata, intensif data dan konkurensi tinggi, dan Tomcat sesuai untuk aplikasi web Java tradisional.

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Adakah nodejs rangka kerja bahagian belakang? Adakah nodejs rangka kerja bahagian belakang? Apr 21, 2024 am 05:09 AM

Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apr 21, 2024 am 05:18 AM

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Apakah pembolehubah global dalam nodejs Apakah pembolehubah global dalam nodejs Apr 21, 2024 am 04:54 AM

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Adakah nodejs bahasa pembangunan bahagian belakang? Adakah nodejs bahasa pembangunan bahagian belakang? Apr 21, 2024 am 05:09 AM

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Adakah terdapat perbezaan besar antara nodejs dan java? Adakah terdapat perbezaan besar antara nodejs dan java? Apr 21, 2024 am 06:12 AM

Perbezaan utama antara Node.js dan Java ialah reka bentuk dan ciri: Didorong peristiwa vs. didorong benang: Node.js dipacu peristiwa dan Java dipacu benang. Satu-benang vs. berbilang benang: Node.js menggunakan gelung acara satu-benang dan Java menggunakan seni bina berbilang benang. Persekitaran masa jalan: Node.js berjalan pada enjin JavaScript V8, manakala Java berjalan pada JVM. Sintaks: Node.js menggunakan sintaks JavaScript, manakala Java menggunakan sintaks Java. Tujuan: Node.js sesuai untuk tugas intensif I/O, manakala Java sesuai untuk aplikasi perusahaan besar.

Mana satu untuk dipilih antara nodejs dan java? Mana satu untuk dipilih antara nodejs dan java? Apr 21, 2024 am 04:40 AM

Node.js dan Java masing-masing mempunyai kebaikan dan keburukan dalam pembangunan web, dan pilihan bergantung pada keperluan projek. Node.js cemerlang dalam aplikasi masa nyata, pembangunan pesat dan seni bina perkhidmatan mikro, manakala Java cemerlang dalam sokongan, prestasi dan keselamatan gred perusahaan.

See all articles