1.什么是node.js、npm、vue

一、Node.js 是什么?

😺 定義:

Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境,讓你可以在瀏覽器之外運行 JavaScript 代碼,主要用于服務端開發。

😺從計算機底層說:什么是“運行環境”?
“運行環境” = 能接收你寫的高級語言代碼,并把它翻譯成 CPU 能執行的機器指令,然后 管理運行所需的一切資源(內存、I/O、線程等) 的一套系統。

😺😺Node.js 是如何做到“運行 JS 代碼”的?
1. node.exe 本質上 = V8 引擎 + Node API 的封裝
2. 當你運行命令:

😺V8 引擎是怎么工作的?
? V8 本身也是用 C++ 寫的
? 它把 JS 源碼:
? 先解析成 AST(抽象語法樹)
? 再編譯成字節碼(Bytecode)
? 然后使用 JIT(即時編譯器)編譯成機器碼
? 最后直接交給 CPU 執行

😺什么是 Node API?

Node 提供了很多“可以直接調用的功能”,比如:
? fs.readFileSync() → 讀文件
? http.createServer() → 啟動服務器
? process.pid → 訪問當前進程

😺看一下例子,那運行一個 .js 文件時到底發生了什么?

舉例:你運行 node hello.js

背后的流程大致是這樣:

1)你敲命令:node hello.js
? 系統運行 node.exe 程序
? 并把參數 hello.js 傳進去

2)node 程序啟動:初始化 C++ 層

Node 的主程序是 C++ 寫的,它首先會做以下事:

main(argc, argv) {
InitNode(); // 初始化 Node 環境
InitV8(); // 初始化 V8 引擎
StartExecutionLoop(); // 開始 JS 代碼執行流程
}

3)調用 V8,加載并解析 hello.js 文件
? Node 用 fs 模塊(C++)讀取 hello.js 源碼(UTF-8 字符串)
? 把代碼傳給 V8:

v8::Script::Compile(js_code); // 編譯 JS

4)V8 做的事(內部原理簡化)

👉 V8 執行流程:
1. 把 JS 源碼解析成 抽象語法樹 AST
2. 編譯成中間語言(字節碼)
3. 熱代碼用 JIT 編譯成本地機器碼(x86 指令)
4. 執行!

5)JS 調用 Node API 時發生了啥?

假設你寫了:

const fs = require(‘fs’);
fs.readFileSync(‘hello.txt’, ‘utf-8’);

?	require() 是 Node 實現的模塊系統
?	fs.readFileSync 實際是 JS 調到 Node 的 C++ 層代碼
?	通過 C++ 實現的 fs_module.cc 調用操作系統的文件 API(如 Windows 的 ReadFile,Linux 的 read())

6)事件循環(Event Loop)開始轉起來了

如果你的代碼中有異步操作,比如:

setTimeout(() => {
console.log(‘hello’);
}, 1000);

Node 會:
? 利用 libuv 庫管理異步事件
? 注冊回調、設置定時器
? 等待時鐘完成后,事件循環調度你注冊的 JS 回調重新進入 V8 執行

? 圖示總結一下:

你敲:node hello.js

[ node.exe ] 啟動(C++)

加載 V8 引擎(C++)

讀取 JS 文件 → 源碼字符串

[ V8 ]

  • 解析 JS
  • 編譯成字節碼
  • JIT 編譯為機器碼
  • 執行代碼

    遇到 require(‘fs’) 等 Node API
    → 跳到 C++ 層的模塊(文件系統、網絡等)
    → 操作系統調用

    執行結果返回 JS

    繼續事件循環(libuv)

😺npm是什么
npm(Node Package Manager)是 Node.js 的官方包管理工具,用來下載、安裝、管理和分享 JavaScript 包(模塊)。

用最簡單的話來說:

npm 是一個 JS 世界的“應用市場 + 安裝器 + 項目管理助手”。

它做了三件事:
1. 下載安裝開源包:比如你運行 npm install express,它就從網上把 express 框架的代碼包下載下來。
2. 自動管理依賴關系:比如 A 模塊依賴 B 模塊,npm 會自動把 B 一起裝上,不需要你手動找。
3. 維護你的項目依賴信息:通過 package.json 這個文件記錄你用的所有包版本,方便協作和還原環境。

🧠 它和 Node.js 是什么關系?
? Node.js 是運行環境(JS 解釋器 + 系統 API)
? npm 是 Node.js 附帶的“包管理器”

你安裝 Node.js 的時候,其實 npm 也一并被裝好了(就像你裝了 Python,也會帶上 pip)。

你可以在終端里輸入:

node -v # 查看 Node 版本
npm -v # 查看 npm 版本

📦 npm 的核心組成:
1. npm CLI(命令行工具)
就是你常用的 npm install、npm run dev 等命令,其實是由 JS + Node 寫的程序。
2. npm Registry(注冊中心)
一個巨大的“線上代碼倉庫”,地址是 https://registry.npmjs.org
上面有幾百萬個 JS 包,是全世界開發者共享代碼的中心。
3. package.json(項目描述文件)
記錄你的依賴、項目名、腳本命令等,比如這樣:

{
“name”: “my-app”,
“version”: “1.0.0”,
“dependencies”: {
“axios”: “^1.6.0”
},
“scripts”: {
“start”: “node index.js”
}
}

😺npm 管理的“包”到底是什么?

舉個例子:
? 你寫網頁或服務器代碼時,可能會用到別人寫好的功能模塊,比如:
? axios:幫你方便地發送網絡請求(AJAX)
? express:快速搭建后端服務器框架
? lodash:提供各種實用的函數工具庫
? moment 或 dayjs:處理時間和日期
? react 或 vue:前端的 UI 框架

這些“包”就是一堆寫好的 JS 文件和資源集合,別人寫好了,你直接裝到項目里用,省時又省力。

😺Node.js 的應用場景:
? 構建 Web 服務(如 Express 框架)
? 命令行工具(如 npm)
? 文件處理 / 流式處理
? 后端 API 服務
? 前端工具鏈(webpack、vite、babel 都基于 Node)

😺js和node.js的對比
在這里插入圖片描述

😺Vue 是做什么的?

Vue 是一個用于構建網頁用戶界面的 JavaScript 框架。

說人話就是:
你寫網頁的時候,不再用手搓 DOM、堆 jQuery,而是像搭積木一樣寫“組件”,Vue 幫你把它們拼起來、渲染成頁面,并且自動響應數據變化。

🧱 它能幫你做什么?

? 1. 快速構建“動態網頁”

Vue 的核心思想是:數據驅動視圖。你只要綁定好數據,Vue 就幫你把頁面更新到位。

{{ message }}

data() {
return { message: ‘你好,小*!’ }
}

只要你改了 message 的值,頁面會立刻變,不用你去操作 DOM,特別適合開發復雜的網頁應用。

? 2. 組件化開發

你可以把網頁拆成一個個“小零件”(組件)來寫,每個 .vue 文件就是一個功能獨立的模塊:
? 頂部導航欄組件
? 登錄表單組件
? 商品列表組件
? 評論模塊組件

這樣不僅 易維護、可復用、便于協作開發,也更現代。

? 3. 豐富生態 + 插件

你剛才提到的這些:
? vue-router:做前端路由(頁面切換)
? vuex 或 pinia:做全局狀態管理
? axios:做網絡請求
? element-plus:一整套好看的 UI 組件庫

這些都可以和 Vue 搭配使用,幫你從頁面到功能一步到位。

🚀 用 Vue 可以做哪些項目?
? 個人博客 / 作品集網站
? 電商后臺管理系統(管理商品、訂單、用戶)
? 微信小程序 H5 前端
? 公司官網 / 展示頁
? 與 Node.js 配合寫全棧應用(前后端都用 JS)

😺比較js原生。vue。react的寫法

?	? 原生 HTML + JS 怎么寫
?	? 用 Vue 怎么寫
?	? 用 React 怎么寫

再告訴你Vue 和 React 的區別

🧪 需求:實現一個簡單的“計數器”

功能:
? 顯示一個數字(初始是 0)
? 點按鈕,數字 +1

💻 1. 原生 HTML + JS 寫法(手動操作 DOM)

0

點我加 1
<script>let count = 0;function increment() {count++;document.getElementById('counter').innerText = count;}
</script>

🧠 問題:
? 要手動獲取 DOM、更新內容。
? 頁面和數據是“分開的”,容易出 bug。
? 難以維護,邏輯混亂。

🍃 2. Vue 寫法(數據驅動視圖)

{{ count }}

? 好處:
? 頁面和數據綁定在一起({{ count }} 自動顯示)
? 不需要自己操作 DOM
? 寫法直觀,邏輯清晰

?? 3. React 寫法(函數組件 + Hook)

import React, { useState } from ‘react’;

function Counter() {
const [count, setCount] = useState(0);

return (


{count}


<button onClick={() => setCount(count + 1)}>點我加 1

);
}

export default Counter;

? 特點:
? 也是數據驅動視圖(count 改變頁面自動更新)
? 使用 useState() 管理狀態
? 語法偏向函數式,寫法更自由靈活

? 總結一句話對比:
? 原生 JS 是手動木工:你寫的代碼像“自己鋸木頭、拼木板”
? Vue 是半自動裝配:你提供模板 + 數據,Vue 幫你裝好
? React 是全 JS 式裝配:你用函數式思維、寫純 JS,靈活但對腦子有點挑戰

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907587.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907587.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907587.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在 Vue.js 中集成 Three.js —— 創建一個旋轉的 3D 立方體

在這篇文章中&#xff0c;我將向大家展示如何將 Three.js 與 Vue.js 結合&#xff0c;創建一個簡單的 3D 場景&#xff0c;并展示一個旋轉的立方體。通過這個簡單的示例&#xff0c;你將學習到如何在 Vue 項目中集成 Three.js&#xff0c;以及如何創建動態的 3D 內容。 1. 安裝…

DeepSeek?R1-0528 重磅升級:螞蟻百寶箱免費、無限量調用

DeepSeek?R1-0528 重磅升級&#xff1a;螞蟻百寶箱免費、無限量調用 端午假期前一天&#xff0c;DeepSeek?R1 更新到了 0528 版本&#xff01; 官方說明&#xff1a;0528 版本在深度思考與推理能力方面顯著增強——在數學、編程與通用邏輯等多項基準測評中&#xff0c;表現已…

RS232轉Profinet網關在檢漏儀與西門子PLC里的應用

RS232轉Profinet網關在檢漏儀與西門子PLC里的應用 在工業自動化和控制領域&#xff0c;設備間的高效通信至關重要。RS232轉Profinet網關作為一種關鍵的轉換工具&#xff0c;能夠將傳統的RS232接口設備接入現代化的Profinet網絡&#xff0c;從而實現數據的無縫傳輸和設備的遠程…

jenkins-jenkins簡介

一、簡介 jenkins是一個可擴展的持續集成引擎。持續集成&#xff0c;也就是通常所說的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以說是現代軟件技術開發的基礎。持續集成是一種軟件開發實踐&#xff0c; 即團隊開發成員經常集成他們的工作&#xff0c;通…

vue發版html 生成打包到docker鏡像進行發版

將Vue項目打包成Docker鏡像部署主要分為以下幾個步驟&#xff1a; 1. Vue項目打包? 執行npm run build生成dist文件夾&#xff0c;包含靜態資源文件 注意檢查index.html中資源引用路徑是否正確&#xff08;避免絕對路徑問題&#xff09; 2. 編寫Dockerfile Copy Code FROM…

掃地機器人苦尋新引擎,大疆們卻已攻入腹地

原創 科技新知 前沿科技組 作者丨江籬 編輯丨櫻木、九黎 競爭激烈的掃地機器人賽道&#xff0c;迎來了新玩家。 據近日相關報道&#xff0c;大疆掃地機器人產品已開始量產&#xff0c;預計將于6月份發布。消息稱大疆研發掃地機器人已超過四年&#xff0c;即將上市的產品是掃…

【C++】22. 紅黑樹封裝實現Mymap和Myset

上一章節我們實現了紅黑樹&#xff0c;這一章節我們就用紅黑樹封裝來實現一個我們自己的map和set 1. 源碼及框架分析 SGI-STL 3.0版本的源代碼中&#xff0c;map和set的實現主要分布在若干頭文件中&#xff0c;這些頭文件構成了這兩個容器的完整實現架構&#xff1a; 核心頭文…

02_redis分布式鎖原理

文章目錄 一、redis如何實現分布式鎖1. 使用 SETNX 命令2. 設置過期時間3. 釋放鎖4. 注意事項5. 示例代碼二、Java中分布式鎖如何設置超時時間1. Redis分布式鎖2. 基于Zookeeper的分布式鎖3. 基于數據庫的分布式鎖注意事項一、redis如何實現分布式鎖 Redis 實現分布式鎖是一種…

酷派Cool20/20S/30/40手機安裝Play商店-谷歌三件套-GMS方法

酷派Cool系列主打低端市場&#xff0c;系統無任何GMS程序&#xff0c;也不支持直接開啟或者安裝谷歌服務等功能&#xff0c;對于國內部分經常使用谷歌服務商店的小伙伴非常不友好。涉及機型有酷派Cool20/Cool20S /30/40/50/60等旗下多個設備。好在這些機型運行的系統都是安卓11…

技術為器,服務為本:AI時代的客服價值重構

在智能化浪潮中&#xff0c;大語言模型的出現為客戶服務行業注入了全新動能。然而技術創新的價值不在于技術本身&#xff0c;而在于其賦能服務的深度與廣度。AI對于我們來說&#xff0c;如同發動機之于汽車&#xff0c;重要的不是引擎參數&#xff0c;而是整車帶給用戶的駕駛體…

技術創新如何賦能音視頻直播行業?

在全球音視頻直播行業的快速發展中&#xff0c;技術的持續創新始終是推動行業進步的核心動力。作為大牛直播SDK的開發者&#xff0c;我很榮幸能分享我們公司如何從產品的維度出發&#xff0c;精準把握市場需求&#xff0c;并不斷推動產品的發展&#xff0c;以滿足不斷變化的行業…

Linux線程池(下)(34)

文章目錄 前言一、v3版本二、單例模式概念特點簡單實現 三、其余問題STL線程安全問題智能指針線程安全問題其他鎖的概念 總結 前言 加油&#xff01;&#xff01;&#xff01; 一、v3版本 「優化版」&#xff1a;從任務隊列入手&#xff0c;引入 「生產者消費者模型」&#xff…

Netty 實戰篇:Netty RPC 框架整合 Spring Boot,邁向工程化

本文將基于前面構建的 RPC 能力&#xff0c;嘗試將其與 Spring Boot 整合&#xff0c;借助注解、自動掃描、依賴注入等機制&#xff0c;打造“開箱即用”的 Netty RPC 框架&#xff0c;提升開發效率與工程規范。 一、為什么要整合 Spring Boot&#xff1f; 手動 new 實例、寫注…

Axure中繼器學習筆記

一、中繼器概述 中繼器(Axure Repeater)是Axure中的高級組件&#xff0c;功能類似于數據集成器&#xff0c;主要用于&#xff1a; 數據存儲與管理 數據的增刪改查操作 數據的分頁與展示控制 二、中繼器基本使用流程 數據存儲&#xff1a;將數據儲存在中繼器組件中 數據展…

hf-mirror斷點續傳下載權重

直接瀏覽器雙擊一個一個下載 這種方式不支持斷點續傳 dnf install git-lfs -y 下面成功跳過 LFS 權重下載只拿到 Git 元數據和 LFS 占位符文件了 GIT_LFS_SKIP_SMUDGE1 git clone https://hf-mirror.com/Tongyi-Zhiwen/QwenLong-L1-32B cd QwenLong-L1-32B git lfs install -…

【軟件安裝那些事 3 】CAD(2026 V60.7z) 安裝教程(中文簡體版)步驟完整不跳步 { 附軟件提取下載鏈接,永久有效---------百度網盤 }

通過網盤分享的文件&#xff1a;CAD2026 V60.7z 安裝包 中文 &#xff08;永久有效&#xff09; 鏈接: https://pan.baidu.com/s/122UXbOK9iGsD5Ld-lzrfAA?pwdneqd 提取碼: neqd 1、解壓完成后&#xff0c;打開【Setup】文件夾 2、鼠標右擊【Setup】…

RK3399 Android7.1增加應用安裝白名單機制

通過設置應用包名白名單的方式限制未授權的應用軟件安裝。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…

體現物聯網環境下安全防護的緊迫性 :物聯網環境下的個人信息安全:隱憂與防護之道

摘要&#xff1a;隨著物聯網的飛速發展&#xff0c;個人信息在物聯網環境下面臨的安全風險日益嚴峻。本文深入探討了物聯網環境下個人信息泄露的主要途徑&#xff0c;分析了當前個人信息安全保護面臨的挑戰&#xff0c;并從技術、法律、企業責任和個人意識等多方面提出了相應的…

vue3 項目配置多語言支持,如何從服務端拿多語言配置

在 Vue3 項目中實現多語言支持并從服務端獲取配置&#xff0c;可以使用 Vue I18n 庫。在初始化階段可以發送請求獲取多語言配置或者通過本地文件加載json文件的方式&#xff0c;都可以實現。我這里是tauri項目&#xff0c;所以使用的是invoke從tauri端拿到配置文件&#xff0c;…

使用ssh-audit掃描ssh過期加密算法配置

使用ssh-audit掃描ssh過期加密算法配置 安裝檢查ssh的加密算法配置修改ssh的加密算法配置 安裝 # pip3安裝ssh-audit pip3 instal ssh-audit檢查ssh的加密算法配置 # 檢查ssh的配置 ssh-audit 192.168.50.149修改ssh的加密算法配置 # 查看ssh加密配置文件是否存在 ls /etc/c…