」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 什麼是 Node.js

什麼是 Node.js

發佈於2024-08-01
瀏覽:875

What is Nodejs

Nodejs 是一个 JavaScript 运行时。这意味着nodejs是一个允许您在浏览器之外运行JavaScript的程序。这样一来,就可以使用nodejs来开发后端应用程序了。现在,这不仅限于后端。我们可以构建桌面应用程序、物联网和云应用程序等等。 Nodejs 是跨平台的。该程序本身可以运行 Linux、Windows 和 macOS。

为什么要使用 Nodejs

Nodejs 具有一些优势,包括但不限于:

  • 非阻塞 I/O
  • 异步
  • 可扩展
  • 事件驱动
  • 延迟低
  • 有线程
  • 随时随地都可以使用
  • 拥有一个大型社区

俗话说,眼前的回报意味着长期的不便。这里的缺点是 javascript(顺便说一句,我喜欢 javascript),有时在设计您想要构建的系统时没有考虑到扩展性。再说一遍,不是 Nodejs,而是使用 Nodejs 的工具和人类。

您可以在这里阅读有关nodejs的更多信息

安装

Nodejs 的人很聪明,尊重这一点。它们使您和我的安装变得更加容易。没有技术知识的人可以设置 Nodejs 并开始编写一些代码。他们提供了可以使用的选项:

  • 包管理器
  • 预构建的安装程序
  • 预构建的二进制文件
  • 通过构建源代码进行安装

其中,前三个是友好的。所以选择其中任何一个。让我们前往 download-nodejs 并“放一个 Nodejs”。

截至目前,当前节点版本为 22,LTS(具有长期支持)为 20。

我在 Linux 机器上,所以我将使用 nvm(Node 版本管理器)进行安装。这让我们感觉我们可以拥有多个版本的 Nodejs。这对于 macOS 来说也是开箱即用的。

# installs nvm (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# download and install Node.js (you may need to restart the terminal)
nvm install 20

# verifies the right Node.js version is in the environment
node -v # should print `v20.15.1`

# verifies the right npm version is in the environment
npm -v # should print `10.7.0`

这是nodejs平台(网站)上的相同脚本。所以运行这些命令时应该不会有任何问题。

对于 Windows,类似的东西是

# installs fnm (Fast Node Manager)
winget install Schniz.fnm

# download and install Node.js
fnm use --install-if-missing 20

# verifies the right Node.js version is in the environment
node -v # should print `v20.15.1`

# verifies the right npm version is in the environment
npm -v # should print `10.7.0`

或者只需下载预构建的安装程序,node-prebuilt-installer。最终,您应该能够运行最后两个命令来验证您的安装。

# verifies the right Node.js version is in the environment
node -v # should print `v20.15.1`

# verifies the right npm version is in the environment
npm -v # should print `10.7.0`

非易失性存储器

nvm 在安装过程中不是 Windows 的选项,但可以在此处安装,了解一点它会有教育意义。

我们使用命令 nvm list
列出我们拥有的所有其他版本的 Nodejs

username@computer-name:~$ nvm list
->     v18.18.0
default -> 18.18.0 (-> v18.18.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v18.18.0) (default)
stable -> 18.18 (-> v18.18.0) (default)
lts/* -> lts/hydrogen (-> v18.18.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.18.0

从上面我们可以看出v18.18.0就是我运行的nodejs。

我们可以使用 nvm install 20 安装其他版本,例如 20 LTS

username@computer-name:~$ nvm install 20
Downloading and installing node v20.15.1...
Downloading https://nodejs.org/dist/v20.15.1/node-v20.15.1-linux-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v20.15.1 (npm v10.7.0)

这会自动切换到 v20.15.1。这是最新的 LTS。

现在我可以通过 nvm use 18 切换到我们想要的节点版本

username@computer-name:~$ nvm use 18
Now using node v18.18.0 (npm v10.8.2)
username@computer-name:~$
username@computer-name:~$ node -v
v18.18.0

nvm 上就是这样了

国家公共管理

npm 是一个节点包管理器。如果您想知道什么是包裹,请不要紧张。包与库相同。由其他人编写的一些代码片段或程序可以在我们的程序中用来执行某些操作。因此,包的目的是解决问题等等。 npm 和其他节点包管理器(如yarn、pnpm、bun 等)帮助我们管理为项目安装的包。我们在这里只关注 npm。

要启动一个nodejs项目(不仅仅是javascript),我们需要使用node包。我的意思是,有时我们开发整个程序时不依赖第三方库(我们没有编写也不是 Nodejs 附带的程序)。

我们可以通过使用命令 npm init 创建节点 packege.json 文件来创建 Nodejs 应用程序。执行 npm init --help 来阅读有关 npm init 的更多信息。通常最好在新的环境(文件夹)中启动节点程序。所以我们将创建一个并将其命名为 helloworld。我将使用终端。

username@computer-name:~$ mkdir helloworld
username@computer-name:~$ cd helloworld/
username@computer-name:~/helloworld$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (helloworld) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /home/username/helloworld/package.json:

{
  "name": "helloworld",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
 },
  "author": "",
  "license": "ISC",
  "description": ""
}

Is this OK? (yes) 

username@computer-name:~/helloworld$ 
  • 我创建了一个名为 mkdir helloworld 的文件夹
  • 我改进了helloworld文件夹,cd helloworld
  • 然后我初始化节点,npm init

它将像一个安装向导一样,引导您完成配置步骤。请注意,您可以稍后更新。您只需按“ENTER”、“ENTER”,直到整个过程结束。当您在文件资源管理器中打开 helloworld 文件夹时,您将看到一个新文件 package.json ,其内容与上面的输出类似。

{
  "name": "helloworld",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
 },
  "author": "",
  "license": "ISC",
  "description": ""
}

这个配置很直观。它告诉您我们将要创建的项目(或程序)的名称。它使用父文件夹名称作为项目名称。在节点(项目)初始化过程中,我们可以给它一个名称,甚至为其他字段提供值。这就是我们按下 ENTER、ENTER、...

的地方

无需按 ENTER、ENTER、... 即可完成此操作的另一种方法是执行 npm init -y 。 -y,意思是,是,使用默认值。

节点包主要位于 npmjs.com 上。假设我们要安装expressjs 库。这是在npmjs上搜索express的方法。文档将告诉您如何使用命令 npm i express 来安装它。

username@computer-name:~/helloworld$ npm i express

added 64 packages, and audited 65 packages in 4s

12 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

i 表示安装。您将其写为 npm installexpress。 package.json 将随着添加的包而更新。

{
  "name": "helloworld",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
 },
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.19.2"
 }
}

现在,我们有了一个新的依赖项。

请注意,不会创建任何文件或文件夹。 当我们执行 ls

username@computer-name:~/helloworld$ ls
node_modules  package.json  package-lock.json
  • 我们有node_modules,这是一个保存我们的程序将使用的依赖项(包)的文件夹。
  • 我们还有 package-lock.json,它用作锁定文件,因此得名。它捕获我们安装并用于创建程序的包的确切版本。这样,可以始终使用相同的包及其特定版本,因为同一包的不同版本可能表现不同。

无论如何,我们可以通过三种方式或者更确切地说环境来安装软件包。这基本上就是您想要使用该包的地方。

  • global:您拥有的所有节点程序都可以访问它。通常,当软件包是命令行实用程序等通用程序时,请全局安装软件包。
  • development:这仅用于开发,不在某些远程服务器上使用,因为远程服务器将有其处理该依赖项的用例的方式。这些通常是实用程序库,可以与其他库配合以实现某个目的。这些可能包括但不限于 eslint、prettier、dotenv 等。
  • 生产:这是我们的应用程序主要依赖于运行的包。喜欢快递。

我们可以做的,

  • npm i -g package-names ... 全局安装包
  • npm i --global package-names ... 全局安装包
  • npm i -S package-names ... 安装软件包(用于生产)
  • npm i --save package-names ... 安装软件包(用于生产)
  • npm i -D package-names ... 安装软件包(对于开发,您不需要它来运行我们的应用程序)
  • npm i --save-dev package-names ... 安装软件包(对于开发,您不需要它来运行我们的应用程序)
  • npm uninstall package-names ... 删除或卸载包

本质上,这就是我们管理包所需的全部内容。

版本聲明 本文轉載於:https://dev.to/otumianempire/what-is-nodejs-4h10?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    程式設計 發佈於2025-03-26
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-03-26
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-03-26
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-03-26
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-03-26
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-03-26
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-03-26
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-03-26
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-03-26
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-03-26
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-03-26
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-03-26
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-03-26
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-03-26
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-03-26

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3