[node]node内置模块path
- 模块的导入
- 路径值
- __filename
- __dirname
- path 方法
- path.resolve([from ...], to)
- path.parse()
- path.format()
- path.basename(path[, ext])
- path.extname(p)
- path.dirname(p)
- path.relative(from, to)
- path.normalize(p)
- path.isAbsolute(path)
- path.join([path1][, path2][, ...])
- path 属性
- process
- process.cwd()
- 终端执行该命令
- 文件中调用该命令
path是nodejs的内置模块,提供了处理和转换文件路径的工具
模块的导入
const path = require('path')
index.js文件,文件路径:D:node-test/server/bin/index.js
console.log(__filename);
console.log(__dirname);
console.log(path.resolve('./'));
console.log(path.resolve('..'));
console.log(path.resolve(__dirname,'..'));
路径值
__filename
输出当前命令的文件路径
console.log(__filename);
//D:node-test/server/bin/index.js
__dirname
输出当前命令的文件所在文件夹路径
console.log(__dirname);
//D:node-test/server/bin/
在AMD、CMD、CommonJs中都可以使用该值,但是在ES6环境下,该值失效
import path from 'path'
const __dirname = path.resolve();
path 方法
path.resolve([from …], to)
将 to 参数解析为绝对路径,给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径(方法将一系列路径或路径段解析为绝对路径)
- path.resolve(’./’)//当前命令所在项目的根目录
//D:node-test - path.resolve(’…’);//当前项目所在文件夹
//D: - path.resolve(__dirname,’…’)//执行当前命令文件所在文件夹的父级目录
//D:node-test/server/bin/ - path.resolve(__dirname,’…/’)//执行当前命令文件所在文件夹的父级目录
- path.resolve(__dirname, ‘…/…/’)//执行当前命令所在文件夹的父级的父级目录
path.parse()
对路径进行解析
path.parse('C:\\path\\dir\\file.txt');// Returns:
// { root: 'C:\\',
// dir: 'C:\\path\\dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
path.format()
path.format(pathObject)
从对象中返回路径字符串,和 path.parse 相反。
path.basename(path[, ext])
path:文件所在路径,ext:文件后缀名,可选参数
path.basename('/foo/bar/baz/asdf/quux.html');
// 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// 'quux'
path.extname§
返回路径中文件的后缀名,即路径中最后一个’.‘之后的部分。如果一个路径中并不包含’.‘或该路径只包含一个’.’ 且这个’.'为路径的第一个字符,则此命令返回空字符串。
path.extname('/foo/bar/baz/asdf/quux.html');// '.html'
path.extname('/foo/bar/baz/asdf');// ''
path.dirname§
返回路径中代表文件夹的部分,其实就是指定路径的父级文件夹
path.dirname('/foo/bar/baz/asdf/quux.html');// '/foo/bar/baz/asdf'
path.dirname('/foo/bar/baz/asdf');// '/foo/bar/baz'
path.relative(from, to)
用于将绝对路径转为相对路径,返回从from 到 to
的相对路径(基于当前工作目录)
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');// 返回: '..\\..\\impl\\bbb'
path.relative('C:\test\index.js', 'C:\test\form.js');// "../form.js"
上述第二个例子返回的是"../form.js"而不是"./form.js",两个文件在同一个文件夹,相对路径应该是一个".",也就是"./form.js"才对啊????!!!!
,但是实测却不是
而且对于上述的相对路径的说明感觉是反的
,API 的参数说明不正确,例如真实案例中:
path1:'C:\test\form.js’在path2:'C:\test\index.js’中的相对路径,是"./form.js",也就是from=path1,to=path2,所以该方法的正常参数解析应该是:
path.relative(to,from)
,而不是path.relative(from, to)
path.normalize§
规范化路径,注意’…’ 和 ‘.’
path.isAbsolute(path)
判断参数 path 是否是绝对路径
path.join([path1][, path2][, …])
用于连接路径。该方法的主要用途是正确使用当前系统的路径分隔符
,Unix系统是"/",Windows系统是""
path 属性
属性 | 描述 |
---|---|
path.sep | 平台的文件路径分隔符,’\’ 或 ‘/’。 |
path.delimiter | 平台的分隔符, ; or ‘:’. |
path.posix | 提供上述 path 方法,不过总以 posix 兼容的方式交互 |
path.win32 | 提供上述 path 方法,不过总以 win32 兼容的方式交互 |
process
process.execPath: 当前执行node的路径(如:/bin/node)
process.cwd()
使用的场景有两种
终端执行该命令
敲击命令的所在路径,即在那个路径下执行的该命令,得到就是该路径
- 在cmd终端中,输入node
进入node的执行终端,如果不在node执行终端会无法识别process.cwd() - 输入命令 process.cwd()
输出即敲击命令的所在路径
文件中调用该命令
运行该文件的node命令所在目录,同终端一样
node file.js