what is node js ?
nodejs是构建在chrome v8引擎上的javascript runtime。
特点:
- 事件驱动
- 非阻塞I/O
- 适合处理web端的高并发(只针对i/o密集比较合适,对于CPU密集并不实用)
规范commonjs
require
- require(支持js,json,node,不写名字依次查找);
- require后会先找默认模块,找不到再去找第三方模块;
- module被加载的时候执行,加载后缓存;
//test01模块只会被执行一次,然后放入缓存。
const mod = require('./test01');
const test = require('./test01');
console.log(mod.testVar);
mod.testFn();
复制代码
- 一旦出现某个模块被循环加载,只会输出已执行的部分,未执行的部分不会输出。
系统内置模块 & 第三方引用模块
- 引用内置模块fs
const fs = require('fs');
const result = fs.readFile('./test.txt',(err, data) => {
if(err){
console.log('err:', err);
}else{
//readFile读出的是buffer,toString直接转成字符串
console.log(data.toString());
}
});
console.log('result:', result);
复制代码
- 引用第三方模块
新的node.modules依赖全部磨平,都在一层
- exports 和 module.exports 的区别
源码中定义: const exports = module.exports;
exports为module.exports的一个引用,如果给exports赋值一个对象,指向会发生变化。
- process
argv, argv0, execArgv, execPath
const {argv, argv0, execArgv, execPath} = process;
argv.forEach(item => {
console.log(item)
});
console.log('argv0:', argv0);
console.log('execArgv:', execArgv);
console.log('execPath:', execPath);
复制代码
process.nextTick, setTimeout, setImmediate执行顺序:
- process.nextTick(出现循环调用,后面根本没有机会执行)
- setTimeout
- setImmediate
path
- normalize
const {normalize} = require('path');
console.log(normalize('user/bin//test'));
console.log(normalize('user/bin/../test'));
复制代码
- join:
const {join} = require('path');
join('/user','test','////test');
复制代码
- resolve(相对路径转换成绝对路径)
4.{basename, dirname, extname}
/user/bin/test/no.txt
basename: no.txt
dirname: /user/bin/test
extname: .txt
- parse,format