node模块详解
【摘要】 node模块详解node模块系统 在es6标准之前,es标准没有模块系统,CommonJS的模块功能帮助解决了这一问题CommonJs规范 CommonJS是一种规范,NodeJS是这种规范的实现。 CommonJS对模块的定义如下:模块引用,模块定义,模块标识。模块定义 我们新建一个a.js,其中声明了变量或函数,如需让外部代码使用,则只需在定义变量时或者在代码最后,将其设置为expor...
node模块系统
在es6标准之前,es标准没有模块系统,CommonJS的模块功能帮助解决了这一问题
CommonJs规范
CommonJS是一种规范,NodeJS是这种规范的实现。 CommonJS对模块的定义如下:模块引用,模块定义,模块标识。
模块定义
我们新建一个a.js,其中声明了变量或函数,如需让外部代码使用,则只需在定义变量时或者在代码最后,将其设置为exports对象的属性或方法。a.js就成为了一个可供使用的模块。例如
//a.js
var a=1;
function add(a,b){
return a+b
};
exports.a;
exports.add;
模块引用
如果我们需要在b.js中引入模块a.js的add方法,只需在a.js代码中使用require()
方法,require()
方法返回的是一个对象,所以我们应定义一个变量去接收
//b.js
var b = require("./a.js");
b.add(1,2);//3
console.log(b.a);//1
模块标识
模块标识就是模块的名字,也是传给require()方法的参数,它必须是符合驼峰命名法的字符串,或者绝对路径或者以点开头的相对路径。核心模块或者npm下载的模块的标识就是模块的名字,自己创建的文件模块,就是它的路径。
node对模块的加工
全局对象global
node中有一个global
全局对象,作用与浏览器中的window
类似
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global的方法保存 可以使用该对象验证node模块内的函数是否为全局函数 在c.js中写入如下代码
var a=1;
console.log(global.a)
node c.js 执行后发现global.a undefined,此刻我们会发现,c.js中的a并不是全局变量,这是因为node环境会给每个模块添加一个函数外衣,这时我们在a.js中加入代码console.log(arguments.callee)
,运行结果即可发现这层外衣:
function (exports, require, module, __filename, __dirname) {
//c.js的代码
}
所以模块中的var let const 定义的变量都是局部变量
exports
该对象用于将变量或函数暴露到外部require
函数,用来引入外部模块module
代表当前模块__filename
当前模块完整路径(绝对路径)__dirname
当前模块所在文件夹路径 exports是module的一个属性,module.exports
与exports
作用是一样的
module.exports与exports的区别
模块中,为了方便使用,将module.exports
的地址拷贝给了exports
相当于执行了如下命令:exports=module.exports
所以,使用exports
时只能,一个一个地赋值。
exports.a=1;
exports.b=2;
而module.exports
不仅可以单个赋值,也可以赋值为一个对象,如
module.exports={
a:1,
b:2
}
而exports
不能这么做,否则破坏了
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)