//以下都是以windows环境为例
var path = require('path');
console.log(' module.filename = ' + module.filename + ' ');
console.log(' __filename = ' + __filename + ' ');
console.log(' __dirname = ' + __dirname + ' ');
console.log(' process.cwd() = ' + process.cwd() + ' ');
console.log(' require.main.filename= ' + require.main.filename + ' ');
/*
module.filename:开发期间,该行代码所在的文件。E:testdemolibtest.js
__filename:始终等于 module.filename。E:testdemolibtest.js
__dirname:开发期间,该行代码所在的目录。E:testdemolib\
process.cwd():运行node的工作目录,可以使用 cd /d 修改工作目录。E:testdemo\
require.main.filename:用node命令启动的module的filename, 如 node xxx,这里的filename就是这个xxx。NODE启动的谁他就是谁
path.dirname: 输出:/tmp/demo/js

*/

var filepath = '/tmp/demo/js/test.js';

console.log( path.dirname(filepath));//输出:/tmp/demo/js
console.log( path.basename('/tmp/demo/js/test.js') );// 输出:test.js
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') );// 输出:test 获取到文件名

//path.extname
console.log( path.extname(filepath) );// 输出:.js 获取到文件扩展名;
//path.extname从最后一个.截取到最后一个字符;如果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.json
console.log(path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'));// 输出 '/foo/bar/baz/asdf'

//path.resolve
//例如:path.resolve('/foo/bar', './baz') 类似于先进入cd /foo/bar 再进入 cd ./baz
// 假设当前工作路径是 /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('.') )// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path

console.log( path.resolve('/foo/bar', 'baz') );// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz') );// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz/') );// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', '/tmp/file/') );// 输出 /tmp/file
console.log( path.resolve('/foo/bar', '/tmp/file') );// 输出 /tmp/file
console.log( path.resolve('www', 'js/upload', '../mod.js') );
//综上所述有.或者./或``都会接在上一个的后面
// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js

//path.format
/*
根据接口的描述来看,以下两者是等价的。
root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。
base vs name+ext:两者可以互相替换。
*/
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.parse('/home/user/dir/file.txt')
// returns
// {
// root : "/",
// dir : "/home/user/dir",
// base : "file.txt",
// ext : ".txt",
// name : "file"
// }

//path.relative(from, to) //获取相对路径
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"

console.log(process.env.PATH)
// 'C:Windowssystem32;C:Windows;C:Program Filesnode'

process.env.PATH.split(path.delimiter)
// returns ['C:\Windows\system32', 'C:\Windows', 'C:\Program Files\node\']


smallStone
419 声望71 粉丝

前端一枚^_-