使用 Node 编写应用程序主要是使用
- EcmaScript 语言(和游览器中不一样,在 Node 中没有 BOM、DOM)
- 核心模块
- 文件操作的 fs
- http 服务的 http
- url 路径操作模块
- path 路径处理模块
- os 操作系统信息
- 第三方模块(必须通过npm下载才可以使用)
- art-template
- 自己系的模块
- 自己写的文件
什么是模块化
- 文件作用域
- 通信规则
- 加载 require
- 导出
CommonJS 模块规范
Commonjs是前端模块化的一种规范,同步加载模块,主要使用于服务器端模块化开发,目前使用该规范的有nodejs
AMD:是由commonjs衍生出来的用在浏览器端的异步模块加载规范,实现该规范的技术有require.js
CMD:同步模块加载规范,实现该规范的技术有sea.js
在 Node 中的 JavaScript 还有一个很重要的概念,模块系统
- 在 Node 中只有模块作用域 (外部访问不到内部,内部也访问不到外部)
- 使用 require 方法来加载模块
- 使用 exports 接口对象来导出模块中的成员
导出 exports
- Node 中是模块作用域,默认文件中的所有成员只在当前文件模块有效
- 如果希望文件模块内的成员能被其他模块访问,我们需要把公开的成员都挂载到 exports 接口对象上就可以了
导出多个成员(拿到的导出值在 exports 对象中)
exports.foo = "LBipanda"
exports.obj = {
name: "LB",
age: 15
}
var height = 175
exports.height = height
exports.add = function(x,y){
return x + y
}
导出单个成员(拿到的导出值是:函数、字符串......)
module.exports = "heelo"
以这个为准,后者覆盖前者
module.exports = function(x,y){
return x + y
}
也可以这样来到出多个成员
module.exports = {
add: function(x,y){
return x + y
},
name: "LBipanda"
}
原理解析
exports 是 module.exports 的一个引用
console.log(exports === module.exports) // => true
exports.foo = 'bar'
等价于
module.exports.foo = 'bar'
加载 require
require 方法加载规则
- 核心模块
- 模块名
- 第三方模块
- 模块名
- 用户自己写的
- 路径
语法
- 路径
var 自定义名称 = require("需要加载的模块名")
require 优先从缓存加载
所以这里不会重新加载,但是可以拿到其中的接口对象
这样做的目的是为了避免重复加载,提高加载效率(可以在 node => 03 => require加载规则 文件中查看)
网友评论