Nodejs 环境
学习3个部分知识:
- CommonJs
- global
- process
CommonJS
- 每一个文件都是一个模块,有自己的作用域
- 在模块内部module变量代表模块本身
- module.exports 属性代表模块对外接口
执行下面代码:
//index.js
console.log('bby365')
nodejs帮我们执行的代码如下:
// exports 与 modules.exports 的快捷方式
/*
exprots.test = 1000 会正确导出
exports = {test :100} 不会导出 ,因为此时exports是另外一个对象了,和modules.exports 没有了任何关系
理解两者的区别:对象的引用
*/
const extports = modules.exports
(function(exports, require, module, __filename, __dirname){
console.log('bby365')
})
require规则
- /表示绝对路径, ./ 表示相对当前文件
- 不写扩展名 ,会依次 .js .json .node
- 如果是直接写模块名,先从bulid-in 模块里找,然后在从node_modules文件夹里找第三方的模块
require()一个模块,实际上是执行了这个模块,module.exports 相当于返回值返回。
module被加载,其实是被执行,加载后会缓存:第二次不会再执行,会直接拿缓存中的结果
global
- CommonJs
- Buffer、process、console
- 定时器 timer
setTimeout, setInterval, setImmediate, clearTimeout, clearInterval, clearImmediate
自定义全局变量的方法:
// 01.js
const testVar = 1000; // testVar 并不会成为全局变量,因为每一个模块都会有作用域
global.testVar2 = 500;
// index.js
const mod = require('01.js')
console.log(mod.testVar)
console.log(testVar2)
process
常用属性和事件
// argv, argv0, execArgv, execPath
/*
argv : 外部启用node命令时,可以传递参数。常用属性,argv[2]之后,表示外部传递的参数。
其他3个属性不常用,注意下execArgv属性的区别
*/
const {argv, argv0, execArgv, execPath} = process
argv.forEach(item =>{
console.log(item)
})
console.log('argv0: ' + argv0);
console.log('execArgv: ' + execArgv);
console.log('execPath: ' + execPath);
// env : 返回用户环境信息的对象
// process.cwd() : 返回 进程当前工作目录,翻译成人话:执行文件的目录
// setImmediate() 和 process.nextTick() 的区别; 一般选择 setImmediate()
setImmediate((name) =>{
console.log(name)
},"bby");
process.nextTick(() =>{
console.log('365')
});
// output:
// 365
// bby
网友评论