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

article/2025/8/18 19:17:54

一、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.hkcw.cn/article/NWldCbBhpK.shtml

相关文章

续肉不停!广东潮汕菜市场的猪脚饭要蹲着吃

广东潮汕菜市场的猪脚饭要蹲着吃,在广东潮汕地区,猪脚分为两大门派,一派是隆江,一派为东里,与隆江猪脚一整只卤制不同,东里猪脚要对半分开,切断骨头,是为了让骨髓融入卤汁,令猪脚更易入味。经过炖煮的猪脚和肉,吸足了卤汁,皮胶肉烂,油光水滑,酥香软糯得入口即化,…

库存翻番,赠送股东!五芳斋粽子,卖不动了?BUG:股东申领热情高

五芳斋近日宣布向股东赠送粽子礼盒,引发广泛关注。根据公告,截至4月28日交易结束,在中国证券登记结算有限责任公司上海分公司登记在册的持有公司股份1000股(含)以上的股东,每位可以申领“丰年五芳”粽子礼盒一盒,申领时间为2025年5月28日至6月8日。然而,市场对此反应冷…

男子杀害摊主潜逃27年落网 乡音暴露身份密码

27年前,21岁的外省小伙阿亮在当地与一猪肉摊摊主发生口角,一时冲动持刀将其杀害后隐姓埋名潜逃。当时的技术条件有限,警方追凶工作一度陷入瓶颈。27年后,阿亮辗转逃至扬州仪征。仪征警方凭借一句乡音破解了他的“身份密码”,成功将其抓获归案,这起尘封多年的命案积案终于…

郑大一附院世界最大的医院原院长阚全程被查

“宇宙第一大医院”郑大一附院原院长阚全程被查,医疗圈人称其“阚十亿”。责任编辑:zx0002

为什么现在的富二代更卷?

提到「富二代」,很多人都觉得他们是只知道吃喝玩乐的纨绔子弟,但是很多时候,有些富二代并不像我们想象当中的无忧无虑,现在另一种「卷王富二代」变得越来越多。富二代和穷二代,差的不仅仅是「富」和「穷」,而是平台、资源、心态等等很多方面的差距,之前网上比较流行的一…

小伙拍下800斤杨贵妃同款荔枝 浪漫与话题齐飞

小伙拍下800斤杨贵妃同款荔枝。最近,山东潍坊一位90后小伙拍下800斤杨贵妃同款荔枝的事儿,在网上引发了不小的关注。这一操作给平淡的生活带来了波澜,让人好奇背后的故事。在古代,杨贵妃一句“一骑红尘妃子笑,无人知是荔枝来”,让荔枝成了浪漫与宠爱的代名词。如今,这位…

Flutter实现不规则瀑布流布局拖拽重排序

因为业务&#xff0c;所以需要用flutter去实现一种不规则图形的瀑布流&#xff0c;但是同时需要支持拖拽并重新排序。效果类似如下。 查询过现有的插件&#xff0c;要么是仅支持同样大小的组件进行排序&#xff0c;要么就是动画效果不是很满意&#xff0c;有点死板&#xff0c;…

设置变体控制两个apk, 一个是有密码,一个是没有密码!

// ✅ 定义变体维度 flavorDimensions "default"// ✅ 定义产品变体 productFlavors {create("noPassword") {dimension "default"buildConfigField("boolean", "HAS_DEFAULT_PASSWORD", "false")buildConfigFi…

Leetcode 2921. 价格递增的最大利润三元组 II

1.题目基本信息 1.1.题目描述 给定长度为 n 的数组 prices 和 profits &#xff08;下标从 0 开始&#xff09;。一个商店有 n 个商品&#xff0c;第 i 个商品的价格为 prices[i]&#xff0c;利润为 profits[i]。 需要选择三个商品&#xff0c;满足以下条件&#xff1a; pr…

电视剧《长安的荔枝》定档6月7日 雷佳音岳云鹏携手破局

古装传奇剧《长安的荔枝》由曹盾、高翔执导,马伯庸担任故事顾问,雷佳音和岳云鹏领衔主演,将于6月7日19:30在CCTV-8黄金强档播出,并在腾讯视频全网独播。此外,那尔那茜、安沺、吕凉、公磊、冯嘉怡、芦芳生、郭涛、韩童生、窦骁、张天爱、尹昉、明道等演员也将出演。该剧改编…

欧阳娜娜体验小鹏MONA M03 智能驾驶新标杆

5月28日晚,小鹏汽车在北京举办了MONA潮玩派对暨M03 Max新车上市发布会。会上,小鹏MONA M03升级亮相,并推出了四款全新版型,全球首发了人机共驾功能,官方指导价在11.98万至13.98万元之间。小鹏汽车董事长兼CEO何小鹏与车主欧阳娜娜现场互动,详细介绍了M03 Max的高阶智能辅…

女子托运行李丢失金手链 嫌疑人被拘 警方介入调查

杨女士乘坐春秋航空班机从西安回宁波时丢失了一条黄金手链。5月30日凌晨,她透露西安咸阳国际机场警方已抓获嫌疑人,她将前往西安协助警方办案。5月25日,杨女士乘坐春秋航空公司班机从西安返回宁波,到家后发现装在托运行李箱中的一条黄金手链丢失,而包装盒及箱子中的其他物…

燃气气瓶将迎“码上管理”阶段 国家标准护航安全

市场监管总局(国家标准委)发布了《燃气气瓶和燃气瓶阀溯源二维码应用技术规范》国家标准,该标准对民用燃气气瓶和瓶阀的质量信息追溯提出了全面要求,并将于2025年6月1日起实施。这项标准旨在解决当前燃气安全运行中存在的一些隐患,与《气瓶安全技术规程》相结合,提出了更…

DeepSeek: 我又强了!究竟是如何做到的呢?

DeepSeek:我又强了。你是否也曾梦想过工作效率翻倍,一天的工作五分钟搞定?DeepSeek升级后,用户纷纷感叹:“接入DeepSeek后,我又强了!”这款智能工具究竟是如何做到的呢?DeepSeek自上线以来,就凭借其强大的AI文档处理能力迅速走红网络。它不仅能帮助用户一键审核文档,…

保安谋划1个月偷走1亿元玉石 现实版《疯狂的石头》上演

新疆乌鲁木齐发生了一起现实版的《疯狂的石头》盗窃案。5月23日凌晨,某大厦玉石展厅内共计67块玉石被盗,受害人估价约1个亿。警方在现场勘查时发现门锁完好,但23楼窗户玻璃被砸,外侧有使用绳索的痕迹,27层平台也发现了绳索等物品及攀爬痕迹。调查揭示,这起案件的幕后黑手…

【Linux】揭秘Linux进程优先级与调度机制

8.进程优先级以及进程调度切换 文章目录 8.进程优先级以及进程调度切换一、进程优先级介绍查看进程的优先级PRI and NI查看进程优先级的命令 二、进程切换1. CPU 执行程序的过程2. 什么是上下文、为什么要保存、保存到哪3. 上下文保存和恢复的完整流程4. 多进程如何交替运行&am…

OSCP备战-SickOs1.2靶场详细步骤

一、靶机介绍 靶机基本信息&#xff1a; 靶机下载链接https://www.vulnhub.com/entry/sickos-12,144/作者D4rk发布日期2016年4月27日难度中等 二、信息搜集 记得将网络连接改成nat模式 1、 目标IP探测 目标IP&#xff1a;192.168.155.186 2、 端口扫描 nmap -p- --…

厦门花店老板制作艾草花束 端午文创成新宠

厦门花店老板制作艾草花束!商家用艾草搭配菖蒲、黄金球等绿植,用包装纸裹成花束。当厦门溪岸路花鸟市场的晨雾还未散去时,花店老板陈姐已熟练地将艾草、菖蒲、黄金球等捆扎成束,裹上包装纸,系上印有“端午安康”字样的丝质缎带。这些售价18元的“艾草花束”通过跑腿服务送…

17岁中学生从北坡登顶珠峰 创历史纪录

17岁中学生从北坡登顶珠峰!2025年5月25日上午6:39,17岁少年李浩榕成功从北坡登顶珠穆朗玛峰。他不仅是中国首位从北坡登顶珠峰的未成年男生,也是全球首位完成这一壮举的中学生。他来自北京市朝阳区第八十中学。从海拔5200米的珠峰大本营到8848.86米的顶峰,李浩榕和队友们经…

挂艾草的讲究 端午习俗门道多

挂艾草的讲究 端午习俗门道多!端午节即将到来,这是中华民族传承千年的传统节日,充满了浓厚的文化韵味。每逢此时,大街小巷都弥漫着节日的氛围,人们会吃粽子、赛龙舟,还有挂艾草这一重要习俗。艾草在民间被视为端午节的守护神,有着驱邪祈福的美好寓意。关于挂艾草有几点讲…