這集來聊什么是 Nodejs ,看看 Node.js 是為了解決什么樣的痛點而生的,為啥說它是一個 JS 的運行環境,以及 npm 是什么,為何能引發了 Web 開發的革命。
Node.js 的誕生
先來聊聊 Node.js 誕生的故事,了解一下它最早的定位,以及后來定位的變化。
Node.js 是2009的時候由大神 Ryan Dahl 開發的。Ryan 的本職工作是用 C++ 寫服務器,后來他總結出一個經驗,一個高性能服務器應該是滿足“事件驅動,非阻塞 I/O”模型的。C++ 開發起來比較麻煩,於是 Ryan 就想找一種更高級的語言,以便快速開發。
可以說有兩點促成了 Nodejs 的誕生。首先第一點,Ryan 發現 JS 語言本身的特點就是事件驅動並且是非阻塞 I/O 的,跟他的思路正是絕配。第二點,Chrome 的 JS 引擎,也就是 V8 引擎是開源的,而且性能特別棒。於是 Ryan 就基於 V8 開發了 Node.js ,注意 Node.js 聽名字好像是個 JS 庫,其實不是的,Node.js 是 C++ 開發的,到官網 http://nodejs.org 可以看到
Node.js 是一個基於 Chrome V8 引擎的 Javascript 運行環境
所以說 Node.js 不是庫,是一個運行環境,或者說是一個 JS 語言解釋器。
Node.js 最初的定位是提升 Ryan 自己的日常工作效率,也就是用來寫服務器代碼的,但是后來沒有想到的是 Node.js 在前端領域卻大放異彩。
先說幾句 Node.js 在服務器端的發展。Node.js 的誕生帶給人們的是個大大的驚喜,傳統上 Web 開發者,前端用 JS 寫,但是寫服務器端代碼的時候還必須用另外一種語言,類似 Ruby/Java/PHP 等。但是 Node.js 出現之后,JS 前后通吃了。如果去網上搜 Node.js 的資料,很多都是用 Node.js 去寫服務器代碼的。
但是,Node.js 今天也成為了 Web 前端開發必不可少的基礎設施。注意,Web 前端的 JS 代碼最終還是運行在瀏覽器中的,所以運行的時候,或者說在產品環境下,不依賴於 Node.js 。但是,Node.js 誕生以后,前端大爆發,類似 React/Vuejs 這樣的前端框架的開發環境變得非常強大和負責,Node.js 是這些開發環境運行的基礎。
這就是關於 Node.js 誕生,以及它如何從純后端發展到前后通吃的故事。
Nodejs 中運行 JS 代碼
接下來,演示一下 Nodejs 中如何運行 JS 代碼。
以前 JS 只能運行在瀏覽器中,Node.js 出現之后,不管是服務器上,還是我們自己的的筆記本上,只要安裝了 Node.js 就可以運行 JS 代碼了。假設,咱們已經安裝好了 Node.js ,那么進入命令行,
node
執行 node 命令,就可以進入 Node.js 的交互環境。
1 + 1
執行加法操作,回車,就可以看到代碼正確執行了。Ctrl-D 可以退出這個交互環境。
但是更為常見的一種執行方式,是把把代碼寫入到一個文件中。
app.js
console.log("hello");
然后這樣來在命令行中執行
node app.js
就可以看到 hello 被打印出來了,而這樣過程跟瀏覽器沒有一毛錢關系。
另外有一點是要特別注意的。Node.js 和瀏覽器是不同的環境,是有着很多細小的差異的。首先,二者各自包含的全局變量不同。document 對象是用來操作頁面的,所以只有瀏覽器環境下才可以直接使用。但是如果是要放到 Node.js 環境下運行代碼,就不要使用 document 。同樣的道理,Node.js 中可以直接拿來使用的 http 對象,在瀏覽器環境下就沒有。其次,Node.js 和瀏覽器對 ES6 新特性的支持程度也是不同的,這一點也要注意。
關於如何在 Node.js 環境下運行 JS 代碼,我們就聊到這里。
npm 是世界上最大軟件包倉庫
最后來聊 npm 。Node.js 引發了前后端開發的爆發,尤其是前端。 JS 開發者眾多,所以貢獻開源代碼的人就非常多,所有這些凝結成了 npm 這個世界上最大的軟件包倉庫。
npm 是 Node Package Manager 的縮寫,意思是 Node 的包管理系統。Nodejs 現在如日中天,其中 npm https://www.npmjs.com/ 這個功不可沒。在這里,我們要實現各種功能幾乎都能找到現成的別人寫好的包,直接拿了用就好了。
很多 npm 包都對應一個 Github 項目,但是如果只有代碼,那么使用起來還不是特別方便。而當系統上安裝好了 Node.js 之后,就會配套安裝一個命令,叫做 npm 。
npm install moment
執行 npm install moment 就可以把 moment 這個包從 npm 的軟件包倉庫中下載這個包,然后安裝到本地了。而 npm 的軟件包倉庫中,有數以萬計的 moment 這樣的包。
關於 npm ,我們就聊到這里。
總結
什么是 Node.js 這集主體內容就是這么多了。總結一下:首先,Nodejs 是基於 Chrome 的 V8 引擎開發的一個 C++ 程序,目的是提供一個 JS 的運行環境。最早 Nodejs 主要是安裝在服務器上,輔助大家用 JS 開發高性能服務器代碼,但是后來 Nodejs 在前端也大放異彩,帶來了 Web 前端開發的革命。Nodejs 下運行 JS 代碼有兩種方式,一種是在 Node.js 的交互環境下運行,另外一種是把代碼寫入文件中,然后用 node 命令執行文件代碼。Nodejs 跟瀏覽器是不同的環境,寫 JS 代碼的時候要注意這些差異。最后,我們介紹了 npm ,通過 npm 裝包的方式,開發中我們再也不用重造輪子了。