Maison > interface Web > js tutoriel > le corps du texte

Introduction au chemin du module de traitement de chemin dans Node.js

不言
Libérer: 2018-06-30 10:07:02
original
1377 Les gens l'ont consulté

Cet article présente principalement le chemin du module de traitement de chemin dans Node.js. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Je crois que tout le monde le sait dans In. nodejs, path est un module fréquemment utilisé, mais que les gens aiment et détestent. Parce que certains documents ne sont pas assez clairs, et d'autres le sont en raison des différences d'interface entre les plates-formes. Cet article vous donnera une introduction détaillée au chemin du module de traitement de chemin dans Node.js. J'espère qu'il vous sera utile pour apprendre ou utiliser le chemin du module.

Préface

Dans node.js, un bloc de chemin est fourni Dans ce module, de nombreux modules sont fournis qui peuvent être utilisés. les méthodes et attributs utilisés pour traiter et convertir les chemins ne sont pas si déroutants si vous classez les interfaces des chemins en fonction de leurs utilisations et que vous y réfléchissez attentivement. Ci-dessous, nous présenterons en détail le chemin du module de traitement de chemin dans Node.js.

Obtenir le chemin/nom de fichier/extension

Obtenir le chemin : path.dirname(filepath)<code>path.dirname(filepath)<br>

Obtenez le nom du fichier : path.basename(filepath)<code>path.basename(filepath)<br>

Obtenez l'extension : path.extname(filepath)<code>path.extname(filepath)<br>

Obtenir le chemin

L'exemple est le suivant :

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

// 输出:/tmp/demo/js
console.log( path.dirname(filepath) );
Copier après la connexion

Obtenir le nom du fichier

À proprement parler, path.basename(filepath) n'est que la dernière partie de le chemin de sortie et ne détermine pas si le nom du fichier.

Mais la plupart du temps, nous pouvons l'utiliser comme une méthode simple pour "obtenir le nom du fichier".

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;) );
Copier après la connexion

Que faire si vous souhaitez uniquement obtenir le nom du fichier, mais pas l'extension du fichier ? Le deuxième paramètre peut être utilisé.

// 输出:test
console.log( path.basename(&#39;/tmp/demo/js/test.js&#39;, &#39;.js&#39;) );
Copier après la connexion

Obtenez l'extension de fichier

Un exemple simple est comme suit :

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

// 输出:.js
console.log( path.extname(filepath) );
Copier après la connexion

Les règles plus détaillées sont les suivantes : (en supposant path.basename(filepath) === B )

Commencez à intercepter à partir du dernier . de B, jusqu'au dernier caractère.

Si . n'existe pas dans B, ou si le premier caractère de B est ., alors une chaîne vide est renvoyée.

Regardez directement l'exemple de documentation officielle

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;
Copier après la connexion

Combinaison de chemins

path.join([...paths])
path.resolve([...paths])
Copier après la connexion

path.join([...chemins])

Rassemblez les chemins puis normalisez-les. Cette phrase m'est de toute façon incompréhensible. Vous pouvez vous référer à la définition du pseudocode ci-dessous.

Un exemple est le suivant :

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;);
Copier après la connexion

Le pseudocode de la définition du chemin est le suivant :

module.exports.join = function(){
 var paths = Array.prototye.slice.call(arguments, 0);
 return this.normalize( paths.join(&#39;/&#39;) );
};
Copier après la connexion

path.resolve([...paths])

La description de cette interface est un peu verbeux. Vous pouvez imaginer que vous exécutez maintenant la commande cd path de gauche à droite sous le shell, et le chemin/nom de fichier absolu finalement obtenu est le résultat renvoyé par cette interface.

Par exemple, path.resolve(&#39;/foo/bar&#39;, &#39;./baz&#39;) peut être vu comme le résultat de la commande suivante

cd /foo/bar
cd ./baz
Copier après la connexion

D'autres exemples de comparaison sont les suivants :

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;) );
Copier après la connexion

Analyse du chemin

path.parse(path)

path.normalize(filepath)

À en juger par la description dans le document officiel, path.normalize(filepath) devrait être une API relativement simple, mais J'ai toujours l'impression que c'est déroutant à utiliser.

Pourquoi ? La description de l'API est trop brève et comprend les éléments suivants :

Si le chemin est vide, retournez., ce qui est équivalent au chemin de travail actuel.

Fusionner les séparateurs de chemin répétés (tels que / sous Linux) dans le chemin en un seul.

Traitez les ., .. dans le chemin. (Semblable au cd en shell..)

S'il y a un / à la fin du chemin, alors conservez le /.

J'ai l'impression qu'un frère sur stackoverflow a une explication plus réaliste de cette API, voici le lien original.

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"
Copier après la connexion

L'exemple de code est le suivant. Il est recommandé aux lecteurs de copier le code et de l'exécuter pour voir l'effet réel.

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;) );
});
Copier après la connexion

Décomposition/combinaison du chemin de fichier

path.format(pathObject) : Combinez les attributs root, dir, base, name et ext de pathObject dans un chemin de fichier selon certaines règles.

path.parse(filepath)  : L'opération inverse de la méthode path.format().

Jetons d’abord un coup d’œil à la description des attributs associés sur le site officiel.

Tout d'abord, sous Linux

┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" / home/user/dir / file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)
Copier après la connexion

然后是windows下

┌─────────────────────┬────────────┐
│   dir  │ base │
├──────┬    ├──────┬─────┤
│ root │    │ name │ ext │
" C:\  path\dir \ file .txt "
└──────┴──────────────┴──────┴─────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)
Copier après la connexion

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
Copier après la connexion

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"
// }
Copier après la connexion

获取相对路径

接口: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"
Copier après la connexion

平台相关接口/属性

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

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;
Copier après la connexion

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;]
Copier après la connexion

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;]
Copier après la connexion

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

相关推荐:

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!