一、nodejs解釋
js是指令碼語言,指令碼語言都需要乙個解析器才能執行。對於寫在html頁面裡的js,瀏覽器充當了解析器的角色。而對於需要獨立執行的js,nodejs就是乙個解析器。
每一種解析器都是乙個執行環境,不但允許js定義各種資料結構,進行各種計算,還允許js使用執行環境提供的內建物件和方法做一些事情。例如執行在瀏覽器中的js的用途是操作dom,瀏覽器就提供了document
之類的內建物件。而執行在nodejs中的js的用途是操作磁碟檔案或搭建http伺服器,nodejs就相應提供了fs
、http
等內建物件。
儘管存在一聽說可以直接執行js檔案就覺得很酷的同學,但大多數同學在接觸新東西時首先關心的是有啥用處,以及能帶來啥價值。
nodejs的作者說,他創造nodejs的目的是為了實現高效能web伺服器,他首先看重的是事件機制和非同步io模型的優越性,而不是js。但是他需要選擇一種程式語言實現他的想法,這種程式語言不能自帶io功能,並且需要能良好支援事件機制。js沒有自帶io功能,天生就用於處理瀏覽器中的dom事件,並且擁有一大群程式設計師,因此就成為了天然的選擇。
如他所願,nodejs在服務端活躍起來,出現了大批基於nodejs的web服務。而另一方面,nodejs讓前端眾如獲神器,終於可以讓自己的能力覆蓋範圍跳出瀏覽器視窗,更大批的前端工具如雨後春筍。
因此,對於前端而言,雖然不是人人都要拿nodejs寫乙個伺服器程式,但簡單可至使用命令互動模式除錯js**片段,複雜可至編寫工具提公升工作效率。nodejs生態圈正欣欣向榮。
二、模組
編寫稍大一點的程式時一般都會將**模組化。在nodejs中,一般將**合理拆分到不同的js檔案中,每乙個檔案就是乙個模組,而檔案路徑就是模組名。
在編寫每個模組時,都有require
、exports
、module
三個預先定義好的變數可供使用。
1、require
require
函式用於在當前模組中載入和使用別的模組,傳入乙個模組名,返回乙個模組匯出物件。模組名可使用相對路徑(以./
開頭),或者是絕對路徑(以/
或c:
之類的碟符開頭)。另外,模組名中的.js
副檔名可以省略。以下是乙個例子。
var foo1 = require('./foo');
var foo3 = require('
/home/user/foo');
//foo1至foo3中儲存的是同乙個模組的匯出物件。
可以使用以下方式載入和使用乙個json檔案。
var data = require('./data.json
');
2、exports
exports
物件是當前模組的匯出物件,用於匯出模組公有方法和屬性。別的模組通過require
函式使用當前模組時得到的就是當前模組的exports
物件。以下例子中匯出了乙個公有方法。
exports.hello =function () ;
3、module
通過module
物件可以訪問到當前模組的一些相關資訊,但最多的用途是替換當前模組的匯出物件。例如模組匯出物件預設是乙個普通物件,如果想改成乙個函式的話,可以使用以下方式。
module.exports =function () ;
以上**中,模組預設匯出物件被替換為乙個函式。
4、模組初始化
乙個模組中的js**僅在模組第一次被使用時執行一次,並在執行過程中初始化模組的匯出物件。之後,快取起來的匯出物件被重複利用。
5、主模組
通過命令列引數傳遞給nodejs以啟動程式的模組被稱為主模組。主模組負責排程組成整個程式的其它模組完成工作。例如通過以下命令啟動程式時,main.js
就是主模組。
$ node main.js
6、例項
//例如有以下目錄。
- /home/user/hello/
- util/counter.js
main.js
//其中counter.js內容如下:
//該模組內部定義了乙個私有變數i,並在exports物件匯出了乙個公有方法count。
var i = 0
;function count()
exports.count =count;
//主模組main.js內容如下:
var counter1 = require('
./util/counter');
var counter2 = require('
./util/counter');
console.log(counter1.count());
console.log(counter2.count());
console.log(counter2.count());
//執行結果
$ node main.js12
3
可以看到,counter.js
並沒有因為被require了兩次而初始化兩次。
小結:
nodejs學習總結
1.yarn全域性安裝依賴 可以直接在命令列使用 yarn global add 依賴名 將會安裝到全域性路徑2.yarn本地安裝依賴 yarn add 依賴名 會在node modules資料夾下加入依賴3.yarn初始化乙個專案,生成package.json yarn init4.yarn安裝專...
nodejs 學習筆記 基礎
本來就沒有寫部落格的習慣,這幾天在學習nodejs,對於一些基本的東西記錄了下來,以備忘記是查閱。1.不要使用 settimeout fn,0 代替 process.nexttick callback 前者比後者效率要低得多 2.util.inherits 實現繼承 var util require...
nodejs基礎學習 模組安裝
第三章 nodejs modular安裝 挺頭疼的。好像是我搞錯了,只是後端的nodejs,沒有angularjs。modular安裝命令 npm install g g 全域性安裝,可使modular在命令視窗中執行。存放位置為 usr local 全域性安裝原理,通過在 usr local bi...