머리말
node.js에서는 경로를 처리하고 변환하는 데 사용할 수 있는 많은 메서드와 속성이 제공됩니다. 경로 인터페이스는 용도에 따라 분류됩니다. .. 잘 생각해보면 그렇게 헷갈리지는 않을 것이다. 아래에서는 Node.js의 경로 처리 모듈 경로를 자세히 소개하겠습니다.
경로/파일 이름/확장자 가져오기
경로 가져오기: path.dirname(filepath)
파일 이름 가져오기: path.basename(filepath )
확장자 가져오기: path.extname(filepath)
경로 가져오기
예제는 다음과 같습니다.
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; // 输出:/tmp/demo/js console.log( path.dirname(filepath) );
파일 이름 가져오기
엄밀히 말하면 path.basename(filepath)은 경로의 마지막 부분만 출력하고 파일 이름인지 여부는 확인하지 않습니다.
그러나 대부분의 경우 "파일 이름을 가져오는" 간단한 방법으로 사용할 수 있습니다.
var path = require('path'); // 输出:test.js console.log( path.basename('/tmp/demo/js/test.js') ); // 输出:test console.log( path.basename('/tmp/demo/js/test/') ); // 输出:test console.log( path.basename('/tmp/demo/js/test') );
파일 이름만 가져오고 파일 확장자는 가져오지 않으려면 어떻게 해야 하나요? 두 번째 매개변수를 사용할 수 있습니다.
// 输出:test console.log( path.basename('/tmp/demo/js/test.js', '.js') );
파일 확장자 가져오기
간단한 예는 다음과 같습니다.
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; // 输出:.js console.log( path.extname(filepath) );
파일 확장자 가져오기
Simple 예제는 다음과 같습니다.
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; // 输出:.js console.log( path.extname(filepath) );
보다 자세한 규칙은 다음과 같습니다. (path.basename(filepath) === B 가정)
마지막부터 차단을 시작합니다. B의 끝까지 문자입니다.
B에 .이 없거나 B의 첫 번째 문자가 .이면 빈 문자열이 반환됩니다.
path.extname('index.html') // returns '.html' path.extname('index.coffee.md') // returns '.md' path.extname('index.') // returns '.' path.extname('index') // returns '' path.extname('.index') // returns ''
경로 조합
path.join([...paths]) path.resolve([...paths])
path.join([...paths])
경로를 하나로 묶은 다음 정규화합니다. 이 문장은 어차피 나로서는 이해할 수 없다. 아래 의사코드 정의를 참고하면 된다.
예는 다음과 같습니다.
var path = require('path'); // 输出 '/foo/bar/baz/asdf' path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
경로 정의의 의사 코드는 다음과 같습니다.
module.exports.join = function(){ var paths = Array.prototye.slice.call(arguments, 0); return this.normalize( paths.join('/') ); };
path.resolve([...paths])
이 인터페이스에 대한 설명이 좀 깁니다. 쉘 아래에서 왼쪽에서 오른쪽으로 cd 경로 명령을 실행하고 있으며 최종적으로 얻은 절대 경로/파일 이름이 이 인터페이스에서 반환된 결과라고 상상할 수 있습니다.
예를 들어 path.resolve('/foo/bar', './baz')는 다음 명령의 결과로 볼 수 있습니다.
cd /foo/bar cd ./baz
더 많은 비교 예는 다음과 같습니다. 다음:
var path = require('path'); // 假设当前工作路径是 /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('') ) // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path console.log( path.resolve('.') ) // 输出 /foo/bar/baz console.log( path.resolve('/foo/bar', './baz') ); // 输出 /foo/bar/baz console.log( path.resolve('/foo/bar', './baz/') ); // 输出 /tmp/file console.log( path.resolve('/foo/bar', '/tmp/file/') ); // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js console.log( path.resolve('www', 'js/upload', '../mod.js') );
경로 구문 분석
path.parse(path)
path.normalize(filepath)
From 공식 문서 설명인 path.normalize(filepath)는 비교적 간단한 API여야 하는데, 사용할 때마다 늘 불안한 느낌이 듭니다.
왜요? API 설명이 너무 짧고 다음 내용이 포함되어 있습니다.
경로가 비어 있으면 return.(현재 작업 경로와 동일)
경로에서 반복되는 경로 구분 기호(예: Linux의 /)를 하나로 병합합니다.
경로에서 ., ..를 처리합니다. (셸의 cd와 비슷합니다..)
경로 끝에 /가 있으면 /를 유지합니다.
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"
코드 예시는 다음과 같습니다. 실제 효과를 보려면 독자가 코드를 복사하고 실행하는 것이 좋습니다.
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; var index = 0; var compare = function(desc, callback){ console.log('[用例%d]:%s', ++index, desc); callback(); console.log('\n'); }; compare('路径为空', function(){ // 输出 . console.log( path.normalize('') ); }); compare('路径结尾是否带/', function(){ // 输出 /tmp/demo/js/upload console.log( path.normalize('/tmp/demo/js/upload') ); // /tmp/demo/js/upload/ console.log( path.normalize('/tmp/demo/js/upload/') ); }); compare('重复的/', function(){ // 输出 /tmp/demo/js console.log( path.normalize('/tmp/demo//js') ); }); compare('路径带..', function(){ // 输出 /tmp/demo/js console.log( path.normalize('/tmp/demo/js/upload/..') ); }); compare('相对路径', function(){ // 输出 demo/js/upload/ console.log( path.normalize('./demo/js/upload/') ); // 输出 demo/js/upload/ console.log( path.normalize('demo/js/upload/') ); }); compare('不常用边界', function(){ // 输出 .. console.log( path.normalize('./..') ); // 输出 .. console.log( path.normalize('..') ); // 输出 ../ console.log( path.normalize('../') ); // 输出 / console.log( path.normalize('/../') ); // 输出 / console.log( path.normalize('/..') ); });
파일 경로 분해/조합
path.format(pathObject): 특정 규칙에 따라 pathObject의 root, dir, base, name 및 ext 속성을 결합합니다. 파일 경로에.
path.parse(filepath): path.format() 메서드의 반대 작업입니다.
먼저 공식 홈페이지의 관련 속성 설명을 살펴보겠습니다.
리눅스 아래
┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " / home/user/dir / file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
윈도우 아래
┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " C:\ path\dir \ file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
path.format(pathObject)
관련 API 읽기 읽기 후 문서를 통해 나는 path.format(pathObject)에서 pathObject의 구성 속성을 더욱 간소화할 수 있다는 것을 발견했습니다.
인터페이스 설명에 따르면 다음 두 가지는 동일합니다.
루트 대 dir: 둘은 서로 교체될 수 있습니다. 차이점은 경로를 연결할 때 루트 뒤에 /가 자동으로 추가되지 않지만 dir은 자동으로 추가된다는 것입니다.
기본 vs 이름+내선: 둘은 서로 교체될 수 있습니다.
var path = require('path'); var p1 = path.format({ root: '/tmp/', base: 'hello.js' }); console.log( p1 ); // 输出 /tmp/hello.js var p2 = path.format({ dir: '/tmp', name: 'hello', ext: '.js' }); console.log( p2 ); // 输出 /tmp/hello.js
path.parse(filepath)
path.format(pathObject)의 역연산은 공식 홈페이지에 직접 가서 예시를 확인하세요.
네 가지 속성은 사용자에게 매우 편리하지만 path.format(pathObject)에도 네 가지 구성 속성이 있어 다소 혼동하기 쉽습니다.
path.parse('/home/user/dir/file.txt') // returns // { // root : "/", // dir : "/home/user/dir", // base : "file.txt", // ext : ".txt", // name : "file" // }
상대 경로 가져오기
인터페이스: path.relative(from, to)
설명: from 경로에서 to 경로까지의 상대 경로입니다.
경계:
from과 to가 동일한 경로를 가리키는 경우 빈 문자열이 반환됩니다.
from 또는 to가 비어 있으면 현재 작업 경로를 반환합니다.
위의 예:
var path = require('path'); var p1 = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); console.log(p1); // 输出 "../../impl/bbb" var p2 = path.relative('/data/demo', '/data/demo'); console.log(p2); // 输出 "" var p3 = path.relative('/data/demo', ''); console.log(p3); // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"
플랫폼 관련 인터페이스/속성
다음 속성과 인터페이스는 플랫폼. 즉, 동일한 속성과 인터페이스가 플랫폼에 따라 다르게 동작합니다.
path.posix: 경로 관련 속성 및 인터페이스의 Linux 구현입니다.
path.win32: 경로 관련 속성 및 인터페이스의 Win32 구현입니다.
path.sep: 경로 구분 기호입니다. 리눅스에서는 /이고, 윈도우에서는 ``입니다.
path.delimiter:path设置的分割符。linux上是:,windows上是;。
注意,当使用 path.win32 相关接口时,参数同样可以使用/做分隔符,但接口返回值的分割符只会是``。
直接来例子更直观。
> path.win32.join('/tmp', 'fuck') '\\tmp\\fuck' > path.win32.sep '\\' > path.win32.join('\tmp', 'demo') '\\tmp\\demo' > path.win32.join('/tmp', 'demo') '\\tmp\\demo'
path.delimiter
linux系统例子:
console.log(process.env.PATH) // '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' process.env.PATH.split(path.delimiter) // returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
windows系统例子:
console.log(process.env.PATH) // 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter) // returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js能有所帮助,如果有疑问大家可以留言交流,谢谢大家对PHP中文网的支持。
更多Node.js中路径处理模块path详解相关文章请关注PHP中文网!