模块的使用
- 一个文件就是一个模块
- 每个模块都有自己的作用域
- 我们只用var来声明的变量,并不是全局的,而是当前模块下的
var a=100;
console.log(global.a); //undefined
全局对象和全局变量
定义在global上的就是全局的 我们可以直接调用
global.a = 1;
console.log(a); //1
当前模块属性
调用方式比较像全局变量 其实不是
//__filename: 当前文件解析过后的绝对路径
console.log(__filename); //不同文件中,__filenam的值可能不一样
模块加载系统
require('模块')
文件: 1.js
console.log('module1')
相同路径下文件: 2.js
require('./1.js')
$node 2.js
可以看到打印了'module1',证明加载了1.js
路径
- require函数参数是一个路径
- 可以是相对路径
- 也可以是绝对路径
注意:相对路径的写法需要加./
require('gulp')
//这么写是代表加载nodejs的核心模块
//或者node_module文件下的模块
文件查找加载方式
- 首先按照模块名称进行查找
- 如果没有找到,则加上.js进行查找
- 如果没有找到,则加上.json
- 如果没有找到,则加上.node
- 抱错
所以我们也可以使用模块名
require('./1')
访问一个模块中定义的变量
-
使用global 不推荐使用这种方式
-
使用模块对象module
module对象
保存提供和当前模块有关的一些信息
console.log(module)
module.exports
moudle对象下的字对象 我们可以通过这个对象把一个模块的局部变量 进行提供访问
文件1.js
var a = 1;
module.exports.a = a;
文件2.js
var m1 = require('./1');
console.log(m1.a); //1
module.exports是一个对象 所以我也可以这么写
module.exports= {
a: a
}
也可以是一个函数
module.exports = function (){
}
global对象
ECMAScript中的全局对象:
- Array
- Date
- ...
一些全局函数:
- setTimeout
- clearTimeout
- setInterval
- clearInterval
- ..
不是global的两个: __filename:指向当前运行的脚本文件名。 __dirname:指向当前运行的脚本所在的目录。
process
该对象表示Node所处的当前进程,允许开发者与该进程互动。
它是一个全局对象
console.log(process);
console.log(global.process);
process.argv
一个包含命令行参数的数组。第一个元素会是 'node', 第二个元素将是 .Js 文件的名称。接下来的元素依次是命令行传入的参数。
// 打印 process.argv
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
});
结果:
$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/de/process-2.js
2: one
3: two=three
4: four
process.env
一个包括用户环境的对象。
process.pid
当前进程的 PID