赞
踩
目录
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。在服务器端,模块的加载是运行时同步加载的。在浏览器端,模块需要提前编译打包处理。有了这一需求,且彼时nodejs刚刚发布,前端没有官方的模块化标准,因此大家选择了社区提供的CommonJS作为模块化标准。在这里有两个非常重要的概念:模块的导出和模块的导入。
1.所有的代码都运行在模块作用域, 不会污染全局作用域。
2.模块可以多次加载,但是只会在第一次加载是运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。
3.模块加载的顺序,按照其在代码中出现的顺序。
4..在 commonjs 中每一个 js 文件都是一个单独的模块,我们可以称之为 module;
5.该模块中,包含 CommonJS 规范的核心变量: exports、module.exports、require;
6.exports 和 module.exports 可以负责对模块中的内容进行导出;
7.require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中的内容;
CommonJS导出模块的方法是exports,导入模块的是require,具体规范如下
1)如果一个JS文件中存在exports或require,该JS文件是一个模块
2)模块内的所有代码均为隐藏代码,包括全局变量、全局函数,这些全局的内容均不应该对全局变量造成任何污染
3)如果一个模块需要暴露一些API提供给外部使用,需要通过exports导出,exports是一个空的对象,你可以为该对象添加任何需要导出的内容
4)如果一个模块需要导入其他模块,通过require实现,require是一个函数,传入模块的路径即可返回该模块导出的整个内容
【注】CommonJS只是一个规范,相当于告诉你按什么标准制造汽车,但是具体怎么制造还是得看生产商。因此,有了规范以后,nodejs就去实现模块化了
为了实现CommonJS规范,nodejs对模块做出了以下处理
1)为了保证高效的执行,仅加载必要的模块。nedejs只有执行到require函数时才会加载并执行模块
2)为了隐藏模块中的代码,nodejs执行模块函数时,会将模块中的所有代码放置到一个函数块中执行,以保证不污染全局变量
3)为了保证顺利的导出模块的内容,nodejs做了以下处理
在模块开始执行前,初始化一个module.exports = {};
module.exports即模块的导出值
为了方便开发者便捷的导出,nodejs在初始化完module.exports后,又声明了一个变量 exports=module.exports
4)为了避免反复加载同一个模块,modejs默认开启了模块缓存,如果加载的模块已经被加载过了,则会自动使用之前的导出结果
每个模块文件上存在
module
,exports
,require
三个变量
module
记录当前模块信息。require
引入模块的方法。exports
当前模块导出的属性
- const money = 9.9
- const goodsName = 'ipone'
- const info = '是兄弟就来砍一刀,9.9包邮iphone'
-
- function foot(book) {
- console.log("读" + book);
-
- }
-
- //导出
- module.exports = {
- money,
- goodsName,
- info,
- foot
- }
- console.log('需要引入别的模块')
-
-
- //引入 indx2 模块
- const order = require("./indx2");
-
-
- console.log(order);
- // 输出:{
- // money: 9.9,
- // goodsName: 'ipone',
- // info: '是兄弟就来砍一刀,9.9包邮iphone',
- // foot: [Function: foot]
- // }
-
- console.log(order.money) //9.9
- console.log(order.goodsName) //ipone
- console.log(order.info) //是兄弟就来砍一刀,9.9包邮iphone
-
- //往foot里传参
- order.foot('书') //读书
在终端中 输入 node 文件名 (注意路径)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。