web前端-初探Node模块化

举报
DUT_ws 发表于 2020/09/16 21:30:12 2020/09/16
【摘要】 node模块化及使用模块的方法步骤我们知道,在我们做项目的时候,如果程序设计的规模达到了一定复杂程度,则必须对其进行模块化以管理各个包或者文件。模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制,所以node在这方面进行了一些封装并提供了向外暴露模块和引入模块的方法。1.模块分类核心模块:由node引擎提供好的模块,模块标识就是模块名文件模块:用户自己创建的模块,模块标识是...

node模块化及使用模块的方法步骤

我们知道,在我们做项目的时候,如果程序设计的规模达到了一定复杂程度,则必须对其进行模块化以管理各个包或者文件。模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制,所以node在这方面进行了一些封装并提供了向外暴露模块和引入模块的方法。

1.模块分类

核心模块:由node引擎提供好的模块,模块标识就是模块名

文件模块:用户自己创建的模块,模块标识是文件的路径

2.模块化原理

  • 在Node中,一个js文件就是一个模块,每个js文件中的变量和函数都不是全局作用域,在其他模块中无法访问

  • 而实际上当node在执行模块中的代码时,它会将所有代码包装在一个外层函数中,故模块中的变量和函数默认状态都不是全局变量

  • 故实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时同时传递进了5个参数

function (exports, require, module, __filename, __dirname) {
         //用户的代码
}

exports:该对象用来将变量或函数暴露到外部

require:函数,用来引入外部的模块

module:代表当前对象本身,exports就是module的属性,故也可以使用module.exports导出变量或方法

__filename:表示当前模块的完整路径

__dirname:表示当前模块所在文件夹的完整路径

3.Node引入模块:require(模块标识)

  • 引入核心模块如:var math = require("math");

  • 引入文件模块如:require(绝对路径/相对路径)

  • 路径如果是相对路径,必须以.或..开头,如require("./test.js"),也可以直接require("./test")

  • 使用require( )引入模块后,该函数会返回一个对象,这个对象代表的就是引入的模块

4.向模块外部暴露属性或方法

  • 通过exports来向外部暴露变量和方法

  • 将要暴露的变量和方法设置为exports的属性即可

  • 下图是通过exports对象向外暴露变量和方法的例子:

//node2.js中的代码,暴露变量x和方法add(a,b)
exports
.x="我是2中的x";

exports.add=function (a,b) {
   var result=a+b;
   console.log(result)
}
//node1.js中的代码
var
obj=require("./node2.js");

console.log(obj.x)
obj
.add(2,3)

5.exports和module.exports的区别:

  • exports只能可以通过.的形式来向外暴露内部变量:exports.xxx=xxx

  • module.exports既可以通过.的形式,也可以直接以对象赋值:module.exports.xxx=xxx 或 module.exports={ }

module.exports={
    x:"我是node2中的x",
    add: function (a,b) {
        var result=a+b;
        console.log(result)
    }
};


6.Node中的全局变量

  • node中有一个全局变量global,它的作用和网页中window类似

  • 在全局中创建的变量都会作为global的属性保存,如:a=10(不加var)

  • 在全局中创建的函数都会作为global的方法保存

7.总结

node模块化弥补了当前JavaScript没有模块化标准的缺陷,它让JS能够引入后可以在任何地方运行,同时模块的定义十分简单,接口也十分简洁。每个模块具有独立的空间,它们互不干扰,在引用使用时也显得干净利落。


第一次写博客,不足之处希望大家批评指正,天道酬勤,加油!

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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