衆所周知,Node.js 的出現造就了全棧工程師,由於它讓 JavaScript 的舞臺從瀏覽器擴大到了服務端node
而 Node.js 的強大也得益於它龐大的模塊庫,因此學習 Node.js 第一步還得從模塊開始~npm
1、安裝 Node.js 和 npmjson
在 Node.js 中文網下載合適的安裝包瀏覽器
安裝的過程十分簡單,只須要一直點 next 就行。安裝 node.js 的同時會自帶 npm (node package manager) app
安裝完成後,使用命令行工具輸入 node -v 和 npm -v,若是能顯示出版本號,就說明安裝成功。異步
而後輸入 node 進入環境,就能夠運行 JavaScript 語句了ide
連按兩次 Ctrl+C 就能退出 Node.js 環境函數
2、建立模塊工具
上面只是在命令行中運行 Node 程序,在實際開發的時候須要一個集成開發環境學習
我通常使用 Visual Studio Code 做爲開發工具,具體的環境搭建能夠參考廖雪峯大神的視頻講解
手動建立一個項目結構:
其中 app.js 是入口文件,wise_module 用來存放模塊, .vscode 是開發工具生成的配置目錄
而後在 wise_module 目錄下建立 hello.js
// hello.js
'use strict'; function hello(name) { console.log('hello', name); } module.exports = hello;
這個 hello.js 就是一個模塊,經過 module.exports 將函數 hello 做爲輸出結果暴露出來
別的模塊就可以經過 require 引入 hello 函數:
// app.js
'use static'; let hello = require('./wise_module/hello'); hello('wise wrong');
運行結果:
3、深刻解析 require
能夠看到 app.js 中的 require 後面接的是相對路徑
若是改爲這樣:
就會提示找不到對應模塊
這是由於在沒有具體路徑的時候,require 會首先檢查 node.js 核心模塊(如 "fs"),
而後檢查 node_modules,最後檢查環境變量 NODE_PATH 指定的目錄
這裏咱們能夠新建一個 node_modules 文件夾,將 hello.js 挪過去
這時就能正常運行了
上面的 hello 模塊是一個 js 文件,若是 hello 是一個文件夾,就須要在目錄下建立一個 index.js 做爲模塊的入口
實際項目中,node_modules 是由 package.json 生成,裏面用來存放第三方依賴庫
本身開發的模塊仍是須要放到其餘文件目錄下,而後經過 require( /*相對路徑*/ ) 引入
在 Node 這個由異步操做構成的環境中,require 是少有的幾個同步 I/O 操做之一
爲了不堵塞,建議只在程序最初加載的時候使用 require,在程序中 I/O 密集的地方就要避免使用。
4、模塊的兩種導出方式
把上面示例中 hello.js 放回 wise_module 目錄,而後把導出方式改寫一下:
用 exports 這種方式導出的時候,將 hello 函數做爲導出對象的一個鍵值給暴露出來
在 app.js 中調用的時候就須要這樣調用:
若是把導出的代碼改成下面這樣,也能正常工做
看起來 exports 變量和 module.exports 變量彷佛是同一個變量
但實際上仍是有些區別,好比 exports 不能直接賦值
這是由於 exports 只是對 module.exports 的一個全局引用,會在程序加載時初始化爲一個空對象
而這個對象 exports 不能被賦值或者重寫,那樣 exports 就再也不指向 module.exports
不過 module.exports 就沒有這個顧慮,能夠隨意的賦值重寫
在須要導出多個模塊的時候,還能夠這麼寫:
exports 做爲 module.exports 的衍生產物,雖然能夠應對大多數狀況,但仍有不足之處
因此模塊導出的時候,建議使用 module.exports = * 這種方式來輸出