Node.js 包

2018-01-18 19:05 更新

Node.js帶有自己的包管理系統(tǒng),稱為Node Package Manager(NPM)。有三種Node.js模塊:基于文件的模塊,核心模塊和外部node_modules。如果傳遞給require函數(shù)的模塊名稱前綴為“./"或“../"或“/",則它假定為是基于文件的模塊并加載該文件。否則,我們用相同的名稱在核心模塊尋找,例如,util調(diào)用是require('util')。如果沒有找到與此名稱匹配的核心模塊,則會查找node_module。

包的位置

包存儲在當前目錄中名為 node_modules 的子目錄中。

要確定位置,可使用命令 npm root 。

查看所有已安裝的模塊,可使用 npm ls 命令。

安裝 commander 模塊后,可以使用 npm ls 驗證它。

$ npm ls
/npm-test
 |
 +--commander@1.3.2
     |
     +--keypress@0.1.0

上面的代碼顯示了安裝的 commander 模塊。樹結(jié)構(gòu)表明commander依賴于 keypress 模塊。NPM可以識別其依賴性并自動安裝任何所需的模塊。你可以通過瀏覽 node_modules 子目錄查看已安裝的模塊。

掃描node_modules

如果文件/home/myUser/project/myData.js有require('myModule')的require調(diào)用,Node.js按以下順序掃描文件系統(tǒng)的node_modules。將返回第一個找到的myModule.js。

/home/myUser/project/node_modules/myModule.js 
/home/myUser/node_modules/myModule.js 
/home/node_modules/myModule.js 
/node_modules/myModule.js 

Node.js在當前每個父文件夾跟隨的文件夾中查找node_modules/myModule.js,直到它到達當前文件的文件系統(tǒng)樹的根目錄或直到找到myModule.js。

c:/hello/myData.js中的以下代碼加載了一個模塊node_modules/myModule.js。

var myModule = require("myModule"); 
myModule(); // hello node_modules! 

在c:/hello/node_modules/myModule.js下的文件

module.exports = function () {
    console.log("hello node_modules!"); 
} 

如果我們使用基于文件的模塊,myModule.js模塊看起來完全一樣。

基于文件的模塊和node_modules之間的唯一區(qū)別是掃描文件系統(tǒng)以加載JavaScript文件的方式。 所有其他行為是相同的。

基于文件夾的模塊

Node.js將在該文件夾中尋找一個index.js文件,并將其作為模塊文件。

下面的代碼顯示了從文件夾隱式加載index.js。

在bar/bar1.js下的文件

module.exports = function () {
    console.log("bar1 was called"); 
} 

在bar/ bar2.js下的文件

module.exports = function () {
   console.log("bar2 was called"); 
} 

在bar/index.js下的文件

exports.bar1 = require("./bar1"); 
exports.bar2 = require("./bar2"); 

這里是myData.js將使用bar模塊的文件,。

var bar = require("./bar"); 
bar.bar1(); 
bar.bar2(); 

注意

以下代碼顯示如何將基于文件夾的模塊更改為node_modules。

我們可以將require調(diào)用從require('./bar')更改為require('bar')。

// node_modules/bar/bar1.js 
module.exports = function () {/*from  www.o2fo.com*/
   console.log("bar1 was called"); 
} 
// node_modules/bar/bar2.js 
module.exports = function () {
   console.log("bar2 was called"); 
} 

// node_modules/bar/index.js 
exports.bar1 = require("./bar1"); 
exports.bar2 = require("./bar2"); 

// myData.js 
var bar = require("bar"); // look for a node_modules module named bar 
bar.bar1(); 
bar.bar2(); 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號