# commonJS
## commonJS规范和hello world2
### commonJS是一个规范
commonJS是一个规范,讲起来内容会有非常多,我们来点直接的要点
CommonJS对模块的定义十分简单,主要分为模块引用、模块定义和模块标识3个部分。
核心如下
* require - 用来引入依赖
* export - 用来导出模块,包括标识符(identifier)和模块内容(contents)
* module.exports
* exports.xxx
下面以helloworld2来演示具体的用法
### 关于 helloworld2
helloworld2会有2个文件,用来演示多文件直接引用关系
* helloworld2.js
* main.js
### 创建`helloworld2.js`
~~~
module.exports = function () {
console.log('hello world');
}
~~~
这里使用`module.exports`导出一个`function`,里面只是打印了`hello world`
下面我们看一下如何在main.js里调用
### 创建`main.js`
~~~
var hello = require('./helloworld2');
hello()
~~~
这样需要说明的是,通过require来引用helloworld2这个模块,一旦你require了这个模块,那么这个模块对外暴露的方法或变量,你就可以调用了
再回想一下`module.exports`的作用:当前module暴露的方法或变量
那么此处我们可能会有的疑问
* require引用的是一个本地文件(注意./helloworld2代表的是当前目录下的helloworld2.js),如果是其他库呢?
* module.exports这里只是暴露了一个function,那如果想暴露更多方法或变量呢?
### 执行`main.js`
~~~
➜ nodejs git:(master) ✗ node demo/main.js
hello world
~~~
### 我们如果再变一下呢?
helloworld2这个module导出的是一个function,既然是function那么就一定可以直接调用
创建`main.js`
~~~
require('./helloworld2')();
~~~
执行
~~~
➜ nodejs git:(master) ✗ node demo/main2.js
hello world
~~~
### 那么我如果想跟某人打招呼呢?
创建`helloworld3.js`
~~~
module.exports = function (person) {
console.log('hello world ' + person);
}
~~~
创建`main3.js`
~~~
require('./helloworld3')('海角');
~~~
执行
~~~
➜ nodejs git:(master) ✗ node demo/main3.js
hello world 海角
~~~
### 我想调用独立函数
创建`helloworld4.js`
~~~
function say(person) {
console.log('hello world ' + person);
}
module.exports = say;
~~~
创建`main4.js`
~~~
require('./helloworld3')('海角');
~~~
执行
~~~
➜ nodejs git:(master) ✗ node demo/main4.js
hello world 海角
~~~
## 解答疑问
### require引用的是一个本地文件,如果是其他库呢?
(注意./helloworld2代表的是当前目录下的helloworld2.js)
### module.exports这里只是暴露了一个function,那如果想暴露更多方法或变量呢?
我们来假设一下,在helloworld5里既能吃饭又能打招呼呢?
也就是说这个模块要提供2个方法
* 吃饭
* 打招呼
创建`helloworld5.js`
~~~
function say(person) {
console.log('i am say hello world to ' + person);
}
function eat(food) {
console.log('i am eat ' + food);
}
exports.eat = eat;
exports.say = say;
~~~
创建`main5.js`
~~~
var h5 = require('./helloworld5')
h5.eat('兰州拉面');
h5.say('海角');
~~~
执行
~~~
➜ nodejs git:(master) ✗ node demo/main5.js
i am eat 兰州拉面
i am say hello world to 海角
~~~
如果你还记得之前的模块是如何导出,你就会对比一下
之前用的是module.exports,现在用的是exports.xxx
那么你好奇,它们有什么差别么?
- 前言
- 1 skill
- 1.1 Coding WebIDE
- 1.2 git
- 1.3 extra practice
- 1.4 预习
- 2 nodejs入门
- 2.1 入门
- 2.2 安装
- 2.3 helloworld
- 2.4 commonJS规范
- 2.5 模块导出
- 2.6 Nodejs代码调试
- 2.7 编写Nodejs模块
- 2.8 最小化问题
- 2.9 随堂练习
- 3 异步流程控制
- 3.1 什么时候会用到异步流程控制
- 3.2 简单做法async模块
- 3.3 Promise/a+规范
- 3.4 Node.js Promise/a+实现
- 3.5 生成器Generators/yield
- 3.6 Async函数/Await
- 3.7 神奇的co
- 3.8 5种 yieldable
- 3.9 学习重点
- 3.10 随堂练习
- 4 express和微信开发入门
- 4.1 入门
- 4.2 connect
- 4.3 静态Http服务器
- 4.4 那些预处理器
- 4.5 路由
- 4.6 视图与模块引擎
- 4.7 中间件
- 4.8 更多实践
- 4.9 微信入门
- 4.10 随堂练习:完成登录、注册功能
- 5 微信实例与H5实践
- 5.1 微信基础和sandbox
- 5.2 公众号菜单和自动回复
- 5.3 微信OAuth用户授权
- 5.4 微信分享
- 5.5 wechat-api
- 5.6 H5-上篇
- 5.7 H5-下篇
- 5.8 随堂练习
- 6 weui实战
- 6.1 使用bower
- 6.2 移动端抽象
- 6.3 优化滑动列表
- 6.4 weui
- 6.5 让weui和iscroll结婚
- 6.6 优化事件
- 6.7 how-to-write-h5
- 6.8 优化无止境
- 6.9 随堂练习
- 7 微信支付
- 7.1 吹个牛
- 7.2 支付概述
- 7.3 科普几个概念
- 7.4 准备
- 7.5 调试
- 7.6 公众号支付(JSAPI)
- 7.7 对账单
- 7.8 数据处理
- 7.9 随堂练习
- 8 项目实战《付费课程系统MVP》
- 8.1 需求分析
- 8.2 ui/ue
- 8.3 技术栈
- 8.4 模型
- 8.5 静态api
- 8.6 开发
- 8.7 部署
- 8.8 监控
- 8.9 数据统计
- 8.10 demo
- 9 高级篇
- 9.1 前后端分离实践?
- 9.2 如何展望未来的大前端
- 9.3 容器和微服务
- 10 答疑问题收集