node模块详解

举报
sq800 发表于 2020/08/24 17:03:41 2020/08/24
【摘要】 node模块详解node模块系统 在es6标准之前,es标准没有模块系统,CommonJS的模块功能帮助解决了这一问题CommonJs规范 CommonJS是一种规范,NodeJS是这种规范的实现。 CommonJS对模块的定义如下:模块引用,模块定义,模块标识。模块定义 我们新建一个a.js,其中声明了变量或函数,如需让外部代码使用,则只需在定义变量时或者在代码最后,将其设置为expor...

node模块详解

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.exportsexports作用是一样的

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不能这么做,否则破坏了exports=module.exports


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。