国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Nodejs極簡入門教程(一):模塊機制

2024-05-06 16:10:05
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Nodejs極簡入門教程(一):模塊機制,本文講解了模塊基礎知識、模塊的加載、包等內容,需要的朋友可以參考下
 
 

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 命令會將當前目錄下的包移除掉。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 五寨县| 六枝特区| 富宁县| 日喀则市| 胶州市| 蓝田县| 浦县| 弥渡县| 咸丰县| 红桥区| 乌兰察布市| 资中县| 湾仔区| 和静县| 循化| 卫辉市| 金寨县| 金寨县| 错那县| 开封县| 武安市| 县级市| 庆安县| 美姑县| 青州市| 阿瓦提县| 财经| 兰溪市| 鄯善县| 新巴尔虎左旗| 多伦县| 建宁县| 金溪县| 乐山市| 福州市| 耿马| 桂林市| 舒兰市| 息烽县| 富裕县| 瑞丽市|