global 全局变量
模块包装器
(function(exports, require, module, __filename, __dirname) {
// 模块的代码实际上在这里
});
-
exports
exports = global.exports = {} (注意这是个对象,实际对外导出的是global.exports)
-
module
module = global.module = {} (注意这是个对象,实际对外导出的是global.module)
-
require()
引包
-
__filename
当前模块的文件名称---解析后的绝对路径。 在主程序中这不一定要跟命令行中使用的名称一致。
-
__dirname
当前模块的文件夹名称。等同于 __filename 的 path.dirname() 的值。
process 进程
常用属性
-
Events:uncaughtException
process.on('uncaughtException', (err) => { fs.writeSync(1, `Caught exception: ${err}\n`); }); setTimeout(() => { console.log('This will still run.'); }, 500); // 故意调用一个不存在的函数,应用会抛出未捕获的异常 nonexistentFunc(); console.log('This will not run.');
-
argv
属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数。第一个元素为process.execPath。如果需要获取argv[0]的值请参见 process.argv0。第二个元素为当前执行的JavaScript文件路径。剩余的元素为其他命令行参数
```
例如,process-args.js文件有以下代码:
// print process.argv
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
运行以下命令,启动进程:
$ node process-args.js one two=three four
将输出:
0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four
```
- argv0
- execArgv
```
例如:
$ node --harmony script.js --version
process.execArgv的结果:
['--harmony']
process.argv的结果:
['/usr/local/bin/node', 'script.js', '--version']
```
- execPath
- env
一个包含用户环境信息的对象
- cwd()
方法返回 Node.js 进程当前工作的目录
调试
inspect
// chrome打开 chrome://inspect/#devices
$ node --inspect process-args.js
// 进入程序开始时打断点
$ node --inspect-brk process-args.js
对比 setImmediate、setTimeout、process.nextTick
process.nextTick 插入到当前队列队尾,setImmediate 插入到下个队列队首
例如:
setImmediate(() => console.log('setImmediate'))
setTimeout(() => console.log('setTimeout'), 0)
process.nextTick(() => console.log('nextTick'))
输出:
nextTick
setTimeout
setImmediate
模块
path (路径)
- normalize()
格式化路径
- join()
拼接路径,内部会调用normalize
- resolve()
获取一个目标文件的绝对路径
- basename()
获取文件名(路径),不同操作系统获取的不一样
- dirname()
获取所在文件夹路径
- extname()
获取文件的拓展名
- parse
解析一个路径,并返回一个包含这个路径信息的对象
- format
把parse()返回的对象重新组合成字符串并返回这个字符串
- sep
- delimiter
- win32
- posix
Buffer (缓冲)
- alloc()
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);
- allocUnsafe()
// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);
- from()
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
- byteLength()
// 字符串的编码长度
Buffer.byteLength('test')
-
isBuffer()
-
concat(list[, totalLength])
-
5
Buffer 实例方法
- buf.length
- buf.toString()
- buf.fill() 修改buf内容
- buf.equals()
- buf.indexOf()
- buf.copy() 复制buf内容
events (事件)
// 例子
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('触发了一个事件!');
});
myEmitter.emit('event');
- emitter.on(eventName, listener)
- emitter.once(eventName, listener)
- emitter.addListener(eventName, listener)
- emitter.emit(eventName[, ...args])
- emitter.eventNames()
- 错误处理
- 'newListener' 事件
fs (文件系统)
- fs.readFile(path[, options], callback) // 读取文件
- fs.writeFile(file, data[, options], callback) // 写文件
- fs.stat(path, callback) // 查看文件、文件夹信息
-
- stats.isFile() // 是不是文件
-
- stats.isDirectory() // 是不是文件夹
- fs.rename(oldPath, newPath, callback) // 重命名
- fs.unlink(path, callback) // 删除文件
- fs.readdir(path[, options], callback) // 查看文件夹
- fs.mkdir(path[, mode], callback) // 创建文件夹
- fs.rmdir(path, callback) // 删除文件夹
- fs.watch(filename[, options][, listener]) // 监听文件、文件夹变化
- fs.watchFile(filename[, options], listener) // 监听文件变化
- fs.createReadStream(path[, options])
- fs.createWriteStream(path[, options])