node.js基础(一):模块的使用

157 阅读1分钟

模块的使用

  • 一个文件就是一个模块
  • 每个模块都有自己的作用域
  • 我们只用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