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

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

nodejs模塊與包

2024-04-27 15:09:41
字體:
供稿:網(wǎng)友
       概念:模塊(Module)和包(Package)是Node.js最重要的支柱。開發(fā)一個具有一定規(guī)模的程序不可能只用一個文件,通常需要把各個功能拆分、分裝、然后組合起來。模塊正式為了實現(xiàn)這種方式而誕生,在瀏覽器javaScript中,腳本模塊的拆分和組合通常使用HTML的script標簽來實現(xiàn),Node.js提供了require函數(shù)來調(diào)用其他模塊,而且模塊都是基于文件,機制非常簡單,模塊和包的區(qū)別是透明的,因此經(jīng)常不作區(qū)分。        一、模塊            1.什么是模塊                    Ryan                    模塊和文件是一一對應(yīng)的。一個Node.js文件就是一個模塊,這個文件可能是Javascript代碼、JSON或者編譯過的C/C++擴展。                    var http=require('http'),其中http是Node.js的一個核心模塊,通過require函數(shù)獲取這個模塊,然后使用其中的對象            2.創(chuàng)建及加載模塊                 (1)創(chuàng)建模塊                        Node.js提供了exports和require兩個對象,其中exports是模塊公開的接口,require用于從外部獲取一個模塊的接口,即獲取模塊的exports對象                附件module.js和getModule.js的實現(xiàn)                (2)單次加載                        上面的例子有點類似創(chuàng)建一個對象,但實際上和對象又有本質(zhì)的區(qū)別,因為require不會重復(fù)加載模塊,也就是說無論調(diào)用多少次require,獲取的模塊都是同一個                    getModule2.js                (3)覆蓋exports                    有時我們知識想把一個對象封裝到模塊中,例如                    定義模塊:singleobejct.js                    引入模塊使用:getSingleObject.js                    繁瑣:exports.hello=hello;                      引入:require("./singleobject").hello;                    簡易:module.exports=hello;                 exports本身僅僅是一個普通的空對象,即{},它是專門用來聲明接口        二、創(chuàng)建包           1.包的概念                包是在模塊基礎(chǔ)上更深一步的抽象,Node.js的包類似于C/C++的函數(shù)庫或者java的類庫,它講某個獨立的功能封裝起來,用于發(fā)布、更新、依賴管理的版本控制。開發(fā)了npm來解決包的發(fā)布和獲取需求。           2.如何創(chuàng)建一個包                CommonJS規(guī)范的包應(yīng)該具備一下特征:                        package.json必須在包的頂層目錄下              二進制文件應(yīng)該在bin目錄下               javaScript代碼應(yīng)該在lib目錄下               文檔應(yīng)該在doc目錄下                單元測試應(yīng)該在test目錄下                Node.js對包要求并沒有那么嚴格,只要頂層目錄下有package.json,并符合基本規(guī)范即可                 (1)作為文件夾的模塊                        somepackage文件夾                        最簡單的包,就是一個作為文件夾的模塊,                        創(chuàng)建一個文件夾 somepackage,里面有一個index.js,里面提供一個方法sayHello()                        var somepackage=require('./somepackage');                         somepackage.sayHello();                        我們使用這種方法可以把文件夾封裝成一個模塊,即所謂的包。包通常是一些模塊的集合,在模塊的基礎(chǔ)上提供了更高層的抽象,相當(dāng)于提供了一些固定接口的函數(shù)庫,通過定制package.json,我們可以創(chuàng)建更復(fù)雜、更完善、更符合規(guī)范的包用于發(fā)布。                    (2)package.json                    前面的例子,在somepackage文件夾下,我們創(chuàng)建一個package.json的文件,內(nèi)容                        {                            'main':'./lib/index.js'                        }                    Node.js在調(diào)用某個包時,會檢查包中package.json文件的main字段,將其作為包的接口模塊,如果package.json或main字段不存在,會常事尋找index.js或index.code作為包的接口                    package.json的規(guī)范屬性:                                        name:包的名稱,必須是唯一                        description:包的簡要說明                        version:符合語義化版本識別規(guī)范的版本字符串                        keyWords:關(guān)鍵字數(shù)據(jù),通常用于搜索                        maintainers:維護者數(shù)組,每個元素要包含name、email、web可選字段                        contributors:貢獻者數(shù)組,格式與maintainers相同。包的坐著應(yīng)該是貢獻者數(shù)據(jù)的第一個元素                        bugs:提交bug的地址,可以是網(wǎng)址或者電子郵件地址                        licenses:許可證數(shù)組,每個元素要包含type和url字段                        repositories:倉庫托管地址數(shù)組,每個元素要包含type、url和path字段                        dependencies:包的依賴,一個關(guān)聯(lián)數(shù)組,由包名稱和版本號組成。 module.js
var name;exports.setName=function(thisName){	name=thisName;}exports.sayHello=function(){	console.log("hello"+name);}getModule.js
var myModule=require('./module');myModule.setName('alex');myModule.sayHello();getModule2.js
var myModule1=require('./module');myModule1.setName('tomm');var myModule2=require('./module');myModule2.setName('jimm');myModule1.sayHello();singleobject.js
function hello(){	var name;	this.setName=function(thisName){		name=thisName;	}	this.sayHello=function(){		console.log('hello '+name);	}};//exports.hello=hello;module.exports=hello;getSingleObject.js
var hello=require('./singleobject'); var he=new hello(); he.setName("tom"); he.sayHello(); var ho=new hello(); ho.setName('jim'); ho.sayHello();
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 静宁县| 汶上县| 富蕴县| 榆树市| 清原| 华蓥市| 浮梁县| 安图县| 香格里拉县| 东城区| 桐城市| 麻城市| 剑川县| 通辽市| 南通市| 巴中市| 通江县| 安陆市| 云浮市| 泌阳县| 宁波市| 台湾省| 水富县| 固始县| 宁乡县| 杨浦区| 澄江县| 盱眙县| 婺源县| 靖边县| 鄂伦春自治旗| 娄底市| 陇川县| 琼海市| 自贡市| 商丘市| 昌江| 神农架林区| 鄂尔多斯市| 黑山县| 永安市|