為什么是節(jié)點(diǎn)?如何使用節(jié)點(diǎn)

      了解 Node.js,這是一個(gè)用于構(gòu)建服務(wù)器端或桌面應(yīng)用程序的 JavaScript 運(yùn)行時(shí)。

      JavaScript 和 Node.js

      Javascript 自 1995 年以來就已經(jīng)存在,并已成為 Web 開發(fā)的主要語言。在其生命的大部分時(shí)間里,JavaScript 主要用于<script>在 Web 瀏覽器中執(zhí)行的標(biāo)簽內(nèi)的客戶端腳本。這種限制意味著開發(fā)人員經(jīng)常在 Web 應(yīng)用程序的前端(客戶端)和后端(服務(wù)器端)方面使用多種不同的語言和框架工作。

      為什么是節(jié)點(diǎn)?如何使用節(jié)點(diǎn)-南華中天

      盡管還有其他項(xiàng)目將 JavaScript 引入服務(wù)器端應(yīng)用程序,但隨著 2009 年 Node.js 的推出,該功能開始發(fā)揮作用。Node 允許開發(fā)人員編寫直接在計(jì)算機(jī)進(jìn)程本身而不是瀏覽器中運(yùn)行的 JavaScript 代碼。因此,Node 可用于編寫服務(wù)器端應(yīng)用程序,以訪問操作系統(tǒng)、文件系統(tǒng)以及構(gòu)建全功能應(yīng)用程序所需的一切。

      Node.js 是用 C、C++ 和 JavaScript 編寫的,它建立在開源V8?JavaScript 引擎之上,該引擎還支持 Google Chrome 等瀏覽器中的 JS。由于 V8 支持 JavaScript 中的新功能,它們被合并到 Node.js 中。

      特定于節(jié)點(diǎn)的功能

      全局變量

      Node 提供對幾個(gè)重要的全局對象的訪問,以便與 Node 程序文件一起使用。在編寫將在 Node 環(huán)境中運(yùn)行的文件時(shí),這些變量將可以在文件的全局范圍內(nèi)訪問。

      • module是一個(gè)對象,指的是將從文件中導(dǎo)出的功能。在 Node 中,每個(gè)文件都被視為一個(gè)模塊。
      • require()是用于從其他文件或 Node 包中導(dǎo)入模塊的函數(shù)。
      • process是一個(gè)引用運(yùn)行 Node 程序的實(shí)際計(jì)算機(jī)進(jìn)程的對象,并允許訪問命令行參數(shù)等等。

      模塊

      Node 有許多內(nèi)置模塊來幫助與命令行、計(jì)算機(jī)文件系統(tǒng)和 Internet 進(jìn)行交互。這些包括

      • 用于創(chuàng)建 Web 服務(wù)器的HTTP和HTTPS 。
      • File System、OS和Path用于與文件系統(tǒng)、操作系統(tǒng)和文件/目錄路徑進(jìn)行交互。

      您可以查看完整文檔以了解更多 Node 的內(nèi)置功能。

      為什么是節(jié)點(diǎn)?

      根據(jù)Node.js 主頁,Node “使用事件驅(qū)動的非阻塞 I/O 模型”。實(shí)際上,這意味著 Node 可以很好地處理異步 JavaScript 代碼以執(zhí)行許多異步活動,例如讀取和寫入文件系統(tǒng)、處理與數(shù)據(jù)庫服務(wù)器的連接或作為 Web 服務(wù)器處理請求。

      為了處理異步代碼,Node 使用基于回調(diào)的系統(tǒng)。將實(shí)現(xiàn)一些異步活動的節(jié)點(diǎn)函數(shù)和方法采用回調(diào)函數(shù)。只要異步操作已解決,就會調(diào)用此回調(diào)。按照慣例,此回調(diào)的第一個(gè)參數(shù)是錯(cuò)誤占位符。如果異步操作發(fā)生錯(cuò)誤(例如,試圖讀取不存在的文件),則錯(cuò)誤參數(shù)將是一個(gè)錯(cuò)誤對象,但null如果沒有發(fā)生錯(cuò)誤,它將是一個(gè)錯(cuò)誤對象。

      常量fs =要求( 'fs' ) ;
      FS readFile './script.js' 函數(shù)錯(cuò)誤數(shù)據(jù){
      // 如果沒有發(fā)生錯(cuò)誤,則錯(cuò)誤為 null,但如果發(fā)生錯(cuò)誤,則為 Error 對象
      如果錯(cuò)誤{
      拋出錯(cuò)誤
      }
      // 如果沒有拋出錯(cuò)誤,文件數(shù)據(jù)將被傳遞到回調(diào)中
      控制臺日志數(shù)據(jù)
      } ) ;

      在這個(gè)例子中,我們使用 Node 的內(nèi)置fs模塊來讀取script.js文件。文件讀取操作完成后調(diào)用回調(diào)函數(shù)。如果發(fā)生錯(cuò)誤,它將被傳入error并拋出。如果不存在,則從文件讀取操作中檢索到的數(shù)據(jù)將記錄到控制臺。

      如何使用節(jié)點(diǎn)

      該視頻將向您展示如何下載和安裝 Node.js。

      要在 Node 中運(yùn)行 JS 文件,node后跟文件路徑的命令將執(zhí)行程序文件。

      例如,如果我們將以下內(nèi)容保存在文件script.js中:

      控制臺log ( '我是一個(gè) Node 程序' ) ;

      在與script.jsnode script.js相同的文件夾中運(yùn)行終端命令將啟動 Node,打印到終端窗口,然后退出,因?yàn)槟_本文件已完成執(zhí)行。I am a Node program

      節(jié)點(diǎn)作為 REPL

      Node 也可以在終端窗口中用作 Read-Evaluate-Print-Loop 或 REPL。此功能允許您從命令行執(zhí)行 JavaScript 命令。

      安裝 Node 后,您可以通過node在終端中運(yùn)行命令并按來啟動 REPL?Enter。您現(xiàn)在處于交互式 JavaScript 環(huán)境中,可以運(yùn)行任何有效的 JavaScript 代碼,例如4 + 5.?執(zhí)行命令后,Node 將始終打印該評估的結(jié)果。

      $節(jié)點(diǎn)
      > 4 + 5
      9
      > 函數(shù) nodeIsGreat() {
      ... console.log('節(jié)點(diǎn)很棒!');
      ... }
      不明確的
      > 節(jié)點(diǎn)偉大()
      節(jié)點(diǎn)很棒!
      不明確的
      > .退出
      $

      node在此示例中,用戶使用終端命令在第一行啟動節(jié)點(diǎn)。在第 2 行,用戶鍵入4 + 5并使用返回鍵進(jìn)行評估。9打印到輸出終端。

      在第 4 行,用戶打開nodeIsGreat.?因?yàn)檫@個(gè)函數(shù)聲明需要多行,Node REPL 將...在一行的開頭打印以表明它仍在讀取用戶的輸入語句并且尚未評估。在第 6 行關(guān)閉函數(shù)聲明后,undefined打印到輸出終端,因?yàn)楹瘮?shù)聲明本身不計(jì)算任何值。在第 8 行調(diào)用該函數(shù)時(shí),Node is great!記錄到控制臺,并undefined在之后記錄,因?yàn)?code class="styles_code__NWUNd">nodeIsGreat()返回undefined.

      要退出 Node REPL,請.exit隨時(shí)使用該命令并返回到系統(tǒng) shell。按ctrl+c兩次也將退出。

      加載現(xiàn)有文件

      Node REPL 還可以加載現(xiàn)有的 JS 文件。如果我們將以下代碼保存到script.js中:

      var a = 'Node REPL 很有趣!' ;

      我們可以使用.load它來將它加載到 REPL 中。.load接受一個(gè)路徑參數(shù),所以要加載script.js?,我們將使用.load ./script.js.

      $節(jié)點(diǎn)
      > .load ./script.js
      var a = 'Node REPL 很有趣!';
      > 一個(gè)
      “節(jié)點(diǎn) REPL 很有趣!”

      加載腳本文件后,變量可以在 REPL 中訪問,因此當(dāng)我們評估a變量時(shí),它的值已通過加載script.js設(shè)置,并且“節(jié)點(diǎn) REPL 很有趣!”?打印到控制臺。

      通過在終端中運(yùn)行自己嘗試一下,node或者查看REPL 文檔以獲取更多功能。

      包管理

      Node 包是在 Node 開發(fā)人員之間共享模塊的便捷方式。服務(wù)npm是 Node 的默認(rèn)包管理器,它附帶了 Node 的安裝。

      npm 允許訪問數(shù)十萬個(gè)可用的開源包。

      除了 npm,yarn作為另一個(gè) JS 包管理器越來越受歡迎。

      要了解更多信息并查看 npm 的實(shí)際應(yīng)用,請參加我們的瀏覽器兼容性和轉(zhuǎn)譯課程。

      節(jié)點(diǎn)版本

      Node 的主要版本旨在支持最新的 JavaScript 功能,包括 ES6/ES2015 及更高版本,無需轉(zhuǎn)譯。要查看不同版本支持的 JavaScript 功能列表,請?jiān)L問node.green

      版本管理

      與任何主要的軟件版本一樣,頂級 Node 版本(8.x、7x 等)有時(shí)會在舊版本環(huán)境中構(gòu)建的應(yīng)用程序中引入重大更改。版本管理器可用于在單臺計(jì)算機(jī)上的多個(gè) Node 版本之間切換。有兩個(gè)版本管理器提供此功能:nvm(節(jié)點(diǎn)版本管理器)和n。N 可以很容易地安裝為 npm 包!