Node核心API的path模块学习

2019-07-0372次阅读node

webpack配置中经常会碰到path.resolve(__dirname, 'dist')、path.parse(file.path)、path.resolve(filepath)等关于path的API使用,是时候总结整理学习一下关于文件路径及path模块的API。

 

node中的路径分类

node中的路径大致分5类,dirname,filename,process.cwd(),./,../,其中dirname,filename,process.cwd()绝对路径。

console.log(__dirname);
//F:\webgames\site20190702

console.log(__filename);
//F:\webgames\site20190702\gulpfile.js

console.log(process.cwd());
//F:\webgames\site20190702

console.log(path.resolve('./'));
//F:\webgames\site20190702
  • __dirname: 获得当前执行文件所在目录的完整目录名
  • __filename: 获得当前执行文件的带有文件名的完整绝对路径
  • process.cwd(): 获得当前执行node命令时候的文件夹目录名
  • ./: 不使用require时候,./与process.cwd()一样,使用require时候,与__dirname一样

只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:

// 当前目录下
 path.dirname(__filename) + '/path.js'; 
// 相邻目录下
 path.resolve(__dirname, '../regx/regx.js');

 

path模块

path模块提供了用于处理文件和目录路径的实用API,常用的方法如下:

path.basename(path [,ext])

path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux'

basename接收两个参数,第一个是path,第二个是ext(可选参数),当输入第二个参数的时候,打印结果不包括后缀名。

path.dirname(path)

path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf'

返回文件的目录完整地址。path.extname(path)
 

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.extname('.index.md');
// Returns: '.md'

path.extname()方法返回path从.(句点)字符的最后一次出现到最后一部分的字符串结尾的扩展path。如果.在最后一部分中没有path,或者.除了path(参见path.basename())的基本名称的第一个字符之外没有其他字符,则返回一个空字符串。

path.parse(path)

path.parse('/home/user/dir/file.txt');
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
  • path.parse返回的是一个对象:
  • root:代表根目录
  • dir:代表文件所在的文件夹
  • base:代表整一个文件
  • name:代表文件名
  • ext: 代表文件的后缀名

path.format(pathObject)

path.format()方法从对象返回路径字符串。这与之相反的是path.parse()。

PathObject提供属性时,请记住,存在一个属性优先于另一个属性的组合:

  • 如果提供pathObject.dir,则忽略pathObject.root
  • 如果pathObject.base存在,则忽略pathObject.ext和pathObject.name
// If `dir`, `root` and `base` are provided,
// `${dir}${path.sep}${base}`
// will be returned. `root` is ignored.
path.format({
  root: '/ignored',
  dir: '/home/user/dir',
  base: 'file.txt'
});
// Returns: '/home/user/dir/file.txt'

// `root` will be used if `dir` is not specified.
// If only `root` is provided or `dir` is equal to `root` then the
// platform separator will not be included. `ext` will be ignored.
path.format({
  root: '/',
  base: 'file.txt',
  ext: 'ignored'
});
// Returns: '/file.txt'

// `name` + `ext` will be used if `base` is not specified.
path.format({
  root: '/',
  name: 'file',
  ext: '.txt'
});
// Returns: '/file.txt'

path.join([... paths])

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar');
// Throws 'TypeError: Path must be a string. Received {}'
  • 传入的参数是字符串的路径片段,可以是一个,也可以是多个
  • 返回的是一个拼接好的路径,但是根据平台的不同,他会对路径进行不同的规范化,举个例子,Unix系统是/,Windows系统是\,那么你在两个系统下看到的返回结果就不一样。
  • 如果返回的路径字符串长度为零,那么他会返回一个.,代表当前的文件夹。
  • 如果传入的参数中有不是字符串的,那就直接会报错

path.relative(from,to)

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// Returns: '../../impl/bbb'

path.relative()方法返回从相对路径from来to基于当前的工作目录。

  • 如果from、to指向同个路径,那么,返回空字符串。
  • 如果from、to中任一者为空,那么,返回当前工作路径。

path.resolve([... paths])

path.resolve('/foo/bar', './baz');
// Returns: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/');
// Returns: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'

path.resolve()方法将一系列路径或路径段解析为绝对路径。
给定的路径序列是从右到左进行处理的,每个后续路径都是预先设置的,直到构造出绝对路径为止。例如,给定路径段的序列:/foo,/bar,baz,调用path.resolve(“/foo”,“/bar”,“baz”)将返回/bar/baz。

如果在处理完所有给定的路径段之后,还没有生成绝对路径,则使用当前工作目录。

除非将路径解析为根目录,否则结果路径将被规范化并删除尾随斜杠。

忽略零长度路径段。

如果没有传递路径段,path.resolve()将返回当前工作目录的绝对路径。

更多关于path的api请至官网地址查看。

上一篇: Array.prototype.sort()字母排序  下一篇: git中如何正确删除指定的文件和目录并与远程同步  

Node核心API的path模块学习相关文章