# 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 答疑問題收集