Nodejs極簡入門教學(一):模組機制_node.js
JavaScript 規格(ECMAScript)沒有定義一套完善的能適用於大多數程式的標準函式庫。 CommonJS 提供了一套 JavaScript 標準函式庫規格。 Node 實作了 CommonJS 規範。
模組基礎
在 Node 中,模組和檔案是一一對應的。我們定義一個模組:
// circle.js
var PI = Math.PI;
// 匯出函數 area
exports.area = function(r) {
return PI * r * r;
}
// 匯出函數 circumference
exports.circumference = function(r) {
return 2 * PI * r;
};
這裡將需要匯出的函數加入到 exports 物件。模組的局部變數外部無法存取(例如,上例中的 PI 變數)。呼叫 require 載入模組 circle.js:
var circle = require('./circle.js');
console.log('The area of a circle of radius 4 is '
circle.area(4));
附帶提及的是,模組中,存在一個 module 對象,表示模組本身,exports 則是 module 的屬性。
模組的載入
Node 會對已載入的模組進行緩衝,避免再次載入的開銷:
// test.js
console.log("I'm here");
多次載入模組 test.js
// 只輸出一次 "I'm here"
require('./test');
require('./test');
當載入檔案沒有後綴時,Node 會嘗試加入後綴並載入:
1..js(JavaScript 原始檔)
2..node(C/C 擴充模組)
3..json(JSON 檔案)
模組主要有幾類:
1.核心模組。核心模組已經被編譯到了 Node 中,我們在其原始碼中的 lib 目錄可以找到這些核心模組。常見的核心模組:net、http、fs 模組等
2.檔案模組。檔案模組透過一個相對或絕對路徑加載,例如我們上面看到的 circle.js
3.自訂模組。自訂模組位於 node_modules 目錄中,我們透過 npm 安裝的各種模組就放置在 node_modules 目錄中
核心模組總是優先被加載,假如有一個自訂模組 http,那麼加載時仍然會加載核心模組 http 而非自訂模組 http。在載入自訂模組時,首先尋找目前目錄下的 node_modules 目錄,而後尋找父目錄下的 node_modules 目錄,以此類推,直到根目錄。
require 載入的模組不是一個文件,而是一個目錄時,這樣的目錄被叫做套件(package)。套件中存在一個名為 package.json 的檔案(套件描述檔),例如:
{ "name" : "some-library",
"main" : "./lib/some-library.js" }
其中 main 指出需要被載入的模組。如果套件中不存在 package.json 或 package.json 中未指定 main 模組,那麼 Node 將會嘗試載入 index.js、index.node、index.json。
在載入 JavaScript 模組時,被載入的模組被包裹在一個函數中:
function(module, exports, __filename, __dirname, ...) {
JavaScript module
}
每個 JavaScript 模組存取到的 module、exports、__filename、__dirname 等實際上是透過函數參數傳遞進來的。由於這種包裹,才使得模組的局部變數外部無法存取。但有時候也會出現讓人難以理解的問題,例如:
test1.js
exports = {
name: 'Name5566',
}
test2.js
module.exports = {
name: 'Name5566',
}
載入這兩個模組:
var test1 = require('./test1.js');
console.log(test1.name); // undefined
var test2 = require('./test2.js');
console.log(test2.name); // Name5566
exports 作為參數傳遞給模組,我們透過exports.x 自然可以為exports 物件添加屬性(或方法),但直接給exports 賦值(例如,exports = x)僅僅是改變了形參而非實參的值,因此:
1.為 exports 新增屬性時,使用 exports
2.為 exports 賦值時,使用 module.exports
包
依照 CommonJS 的規範,一個完整的包裝應該包含有:
1.package.json 套件描述檔
2.bin 二進位檔案目錄
3.lib JavaScript 程式碼目錄
4.doc 文檔目錄
5.test 測試程式碼目錄
NPM 是一個 Node 的一個套件管理工具。常見用法:
查看指令的文件:
npm help install
檢視指令 install 的文件。
安裝一個套件:
npm install redis
安裝 redis 這個包。 install 指令會將套件安裝在目前目錄下的 node_modules 目錄中。
移除一個包包:
npm remove redis
移除 redis 這個包。 remove 指令會將目前目錄下的包移除掉。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

Node.js 中存在以下全域變數:全域物件:global核心模組:process、console、require執行階段環境變數:__dirname、__filename、__line、__column常數:undefined、null、NaN、Infinity、-Infinity

Node.js 和 Java 的主要差異在於設計和特性:事件驅動與執行緒驅動:Node.js 基於事件驅動,Java 基於執行緒驅動。單執行緒與多執行緒:Node.js 使用單執行緒事件循環,Java 使用多執行緒架構。執行時間環境:Node.js 在 V8 JavaScript 引擎上運行,而 Java 在 JVM 上運行。語法:Node.js 使用 JavaScript 語法,而 Java 使用 Java 語法。用途:Node.js 適用於 I/O 密集型任務,而 Java 適用於大型企業應用程式。

Node.js 專案的伺服器部署步驟:準備部署環境:取得伺服器存取權限、安裝 Node.js、設定 Git 儲存庫。建置應用程式:使用 npm run build 產生可部署程式碼和相依性。上傳程式碼到伺服器:透過 Git 或檔案傳輸協定。安裝依賴項:SSH 登入伺服器並使用 npm install 安裝應用程式相依性。啟動應用程式:使用 node index.js 等命令啟動應用程序,或使用 pm2 等進程管理器。設定反向代理(可選):使用 Nginx 或 Apache 等反向代理路由流量到應用程式

Node.js 和 Java 在 Web 開發中各有優劣,因此選擇取決於專案需求。 Node.js 擅長即時應用程式、快速開發和微服務架構,而 Java 則在企業級支援、效能和安全性方面佔優。
