1. global.process常量
const {argv, argv0, execArgv, execPath} = process// argv 数组argv.forEach(item => { console.log(item)})// 打印如下/** * /usr/local/bin/node node启动的路径 * /Users/nardo/Documents/study/node-study/process.js 执行node命令的脚本路径 */// argv还可以有扩展的参数, 执行 node process.js --test a b=2// 注意写在文件名之前的参数不会被打印/** * /usr/local/bin/node node启动的路径 * /Users/nardo/Documents/study/node-study/process.js 执行node命令的脚本路径 * --test * a * b=2 */ // argv0 保存了argv第一个值的引用console.log('argv0', argv0)// 执行node --inspect process.js --test a b=2console.log('execArgv', execArgv) // [ '--inspect' ]// execPathconsole.log('execPath', execPath) // /usr/local/bin/node node启动的路径// process.envconst { env } = process// process.cwd 打印出当前process的路径console.log('cwd', process.cwd()) // /Users/nardo/Documents/study/node-study
2. path模块
// 1. normalize 格式化路径const { normalize} = require('path')console.log(normalize('/usr//local/bin')) // /usr/local/binconsole.log(normalize('/usr/../local/bin')) // /local/bin// 2. join 拼接路径,调用时默认会调用normalizeconst { join} = require('path')console.log(join('/usr', '../local', '/bin')) // /usr/bin// 3. resolve 将相对路径转为绝对路径const { resolve} = require('path')console.log(resolve('./')) // /Users/nardo/Documents/study/node-study// 4. basename : 文件名, dirname: 路径不含文件名, extname: 拓展名const { basename, dirname, extname} = require('path')const filePath = '/usr/bin/node/no.js'console.log(basename(filePath)) // no.jsconsole.log(dirname(filePath)) // /usr/bin/nodeconsole.log(extname(filePath)) // .js// 5. parse: 将路径解析成上述3个参数,format: 相反const { parse, format} = require('path')let ret = parse(filePath)console.log(ret)/** * { root: '/', dir: '/usr/bin/node', base: 'no.js', ext: '.js', name: 'no' } */// 注意: pathObject的优先级// pathObject.dir存在时,忽略pathObject.root// pathObject.base存在时,pathObject.ext和pathObject.name会被忽略console.log(format({ root: '/ignored', dir: '/bin/node/dir', base: 'yes.js'})) // /bin/node/dir/yes.js root被忽略了console.log(format({ dir: '/bin/node/image', base: 'xmly.png', name: 'not_xmly', ext: 'jpg'}))// /bin/node/image/xmly.png ext和name被忽略了/* 6. sep: 写path时的分隔符* delimiter: 指PATH下的路径分隔符,macOS为 ':' windows为 ';'* win32: * posix:*/const { sep, delimiter, win32, posix} = require('path')console.log('sep:', sep) // /console.log('win.sep', win32.sep) // \console.log('PATH', process.env.PATH) // PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinconsole.log('delimiter', delimiter) // :console.log('win.delimiter', win32.delimiter) // ;
3. paths
// function (exports, require, module, __filename, __dirname) {}// 1. __dirname __filename// const mod = require('./module_exports')const path = require('path')console.log('__dirname: ', __dirname) // /Users/nardo/Documents/study/node-studyconsole.log('__filename: ', __filename) // /Users/nardo/Documents/study/node-study/5_paths.jsconsole.log('process.cwd(): ', process.cwd()) // /Users/nardo/Documents/study/node-studyconsole.log('./ ', path.resolve('./')) // /Users/nardo/Documents/study/node-study// 但如果此时不在当前目录执行脚本,而是返回上一层级// $ cd ..// 打印结果是:// __dirname: /Users/nardo/Documents/study/node-study// __filename: /Users/nardo/Documents/study/node-study/5_paths.js// process.cwd(): /Users/nardo/Documents/study// ./ /Users/nardo/Documents/study// 可以看到 process.cwd()和./变成了执行node命令的路径/** 总结: * 1. __dirname, __filename总是返回文件的绝对路径 * 2. process.cwd() 总是返回node执行所在文件目录 * 3. './' 在require方法中总是相对当前文件所在文件夹,但在其他地方和process.cwd()一样,相对node启动文件夹目录 */
4. global.Buffer
// Buffer 全局变量// 1. 用来处理二进制数据流// 2. 实例类似整数数组,大小固定// 3. C++代码在V8堆外分配物理内存console.log(Buffer.alloc(10)) // <Buffer 00 00 00 00 00 00 00 00 00 00>console.log(Buffer.alloc(5, 1)) // <Buffer 01 01 01 01 01>console.log(Buffer.allocUnsafe(5, 1)) // <Buffer 70 83 81 03 01>console.log(Buffer.from([1, 2, 3])) // <Buffer 01 02 03>console.log(Buffer.from('test')) // <Buffer 74 65 73 74>console.log(Buffer.from('test', 'base64')) // <Buffer b5 eb 2d>// Buffer.byteLengthconsole.log(Buffer.byteLength('test')) // 4console.log(Buffer.byteLength('测试')) // 6// Buffer.isBufferconsole.log(Buffer.isBuffer({})) // falseconsole.log(Buffer.isBuffer(Buffer.from([1,2]))) // true// Buffer.concatconst buf1 = Buffer.from('This ')const buf2 = Buffer.from('is ')const buf3 = Buffer.from('a ')const buf4 = Buffer.from('test ')const buf5 = Buffer.from('! ')const lastBuf = Buffer.concat([buf1, buf2, buf3, buf4, buf5])console.log(lastBuf) // <Buffer 54 68 69 73 20 69 73 20 61 20 20 74 65 73 74 20 21 20>// buf.lengthvar buff = Buffer.from('This is a buffer')console.log(buff.length) // 16 from方法调用时直接由内容决定buffer所占bytesvar buf = Buffer.alloc(10)buf[0] = 2 // 该buffer占10bytes,但是只填充了1个console.log(buf, buf.length) // <Buffer 02 00 00 00 00 00 00 00 00 00> , 10// buf.toString()console.log(buff.toString()) // This is a bufferconsole.log(buff.toString('base64')) // VGhpcyBpcyBhIGJ1ZmZlcg==