Node.js 蠶食計划(一)—— 模塊化編程


眾所周知,Node.js 的出現造就了全棧工程師,因為它讓 JavaScript 的舞台從瀏覽器擴大到了服務端

而 Node.js 的強大也得益於它龐大的模塊庫,所以學習 Node.js 第一步還得從模塊開始~

 

一、安裝 Node.js 和 npm

Node.js 中文網下載合適的安裝包

安裝的過程十分簡單,只需要一直點 next 就行。安裝 node.js 的同時會自帶 npm (node package manager) 

安裝完成后,使用命令行工具輸入 node -vnpm -v,如果能顯示出版本號,就說明安裝成功。

 

然后輸入 node 進入環境,就可以運行 JavaScript 語句了

連按兩次 Ctrl+C 就能退出 Node.js 環境

 

 

二、創建模塊

上面只是在命令行中運行 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');

運行結果:

 

 

三、深入解析 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 密集的地方就要避免使用。

 

 

四、模塊的兩種導出方式

把上面示例中 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 = *  這種方式來輸出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM