1.什么是node.js、npm、vue - 指南

news/2025/10/5 18:40:52/文章来源:https://www.cnblogs.com/yxysuanfa/p/19126883

一、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 (


);
}

export default Counter;

✅ 特点:
• 也是数据驱动视图(count 改变页面自动更新)
• 使用 useState() 管理状态
• 语法偏向函数式,写法更自由灵活

✅ 总结一句话对比:
• 原生 JS 是手动木工:你写的代码像“自己锯木头、拼木板”
• Vue 是半自动装配:你提供模板 + 数据,Vue 帮你装好
• React 是全 JS 式装配:你用函数式思维、写纯 JS,灵活但对脑子有点挑战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技园区建设网站的意义个人网站名字

【Rust】001-基础语法&#xff1a;变量声明及数据类型 文章目录 【Rust】001-基础语法&#xff1a;变量声明及数据类型一、概述1、学习起源2、依托课程 二、入门程序1、Hello World2、交互程序代码演示执行结果 3、继续上难度&#xff1a;访问链接并打印响应依赖代码执行命令 三…

网站建设的常见技术有哪些怎么查询在建工程

useMemo和useCallback的用法以及区别 useCallback 和 useMemo 是 React 中的两个钩子函数&#xff0c;它们的目标都是优化性能&#xff0c;但它们在用途和使用场景上有一些区别。 useCallback useCallback 用于缓存一个回调函数&#xff0c;并在依赖项发生变化时&#xff0c…

深圳网站设计是什么简单网站搭建

1.认识二分查找 二分查找的时间复杂度:O(logN) 二分查找属于算法中耳熟能详的一类&#xff0c;通常的我们会说只有数组有序才可以使用二分查找&#xff0c;不过这种说法并不完全正确&#xff0c;只要数据具有"二段性"就可以使用二分查找&#xff0c;即我们可以找出一…

在wpf .net 8项目中使用materialDesign 4 以上版本的的注意事项

在wpf .net 8项目中使用materialDesign 4 以上版本的的注意事项新建.net8 wpf项目 nuget添加MaterialDesignThemes引用,现在可以用5.2.1,注意:可以只有添加这个包即可,因为新nuget会自动依赖引用MaterialDesignCol…

李臻20242817_安全文件传输系统项目报告_第14周 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一站多通怎么做网站饲料行业建设网站方案设计免费下载ppt

学习java之电脑的常用快捷键和DOS窗口下的常用命令电脑一些常用的快捷键win快捷键&#xff1a;单独按Windows&#xff1a;显示或隐藏 “开始”功能表WindowsBREAK&#xff1a;显示“系统属性” 对话框WindowsD&#xff1a;显示桌面或恢复桌面WindowsM&#xff1a;最小化所有窗口…

做网站套餐enjooy wordpress

本机文件夹同步到云服务器 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。本节操作介绍本地MacOS系统主机通过安装“Microsoft Rem…

长沙做网站 必看 磐石网络网店设计理念

随着我国人民精神文化与物质生活的不断升级&#xff0c;定制真人手办摆件的需求变得广泛&#xff0c;易模推出易模真人手办定制服务&#xff08;小程序&#xff09;&#xff0c;帮助市场合作伙伴能够以全线上、手机端形式为用户制作真人手办&#xff0c;“全线上”的内涵包括手…

洛谷P14120 题解 - lemon

思维路径 容易注意到,这个赛制对于 BaoBao 非常不友好,因为 DreamGrid 可以通过他出的牌来决定自己的出牌。也就是说,我们不需要关注 BaoBao 的出牌顺序,只需要关注他出的每一张牌对应 DreamGrid 出的牌即可。 对于…

通州网站建设服务做网站建设销售

主要实现的那种光晕效果&#xff1a;中间亮&#xff0c;四周逐渐变淡的。 这边有三种发光效果&#xff0c;先上效果图。 第一种、圆形发光体 实现代码&#xff1a;新建shape_light.xml&#xff0c;导入以下代码。使用时&#xff0c;直接给view设置为background。 <?xml …

请网站制作公司费用网站制作与网站建设pdf

Navicat创建数据库表 、导入sql文件&#xff0c;生成表结构 1.打开Navicat2.远程连接mysql连接3.创建数据库4.导入sql文件5.生成表结构 1.打开Navicat 2.远程连接mysql连接 3.创建数据库 4.导入sql文件 导入源代码中的sql文件 5.生成表结构

33 ACwing 294 Count The Repetitions 题解

Count The Repetitions 题面 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn(“abc”,2)=”abcabc” 称字符串 a 能由字符串 b 生成,当且仅当 a 为 b 的子序列。 例如 abdbec 可以生成 abc,但是…

南沙做网站公司中国百强县市榜单

windows使用redis 安装和配置 下载安装方式一-使用压缩包安装解压到指定的文件Redis安装为Windows服务安装成功 方式二-MSI安装包安装完成 Redis配置远程访问1.修改配置文件redis.windows.conf2.修改完redis配置文件&#xff0c;必须重启redis 下载 先下载Redis for windows 的…

北京天通苑网站建设做网站公司报价

这是树的第10篇算法&#xff0c;力扣链接。 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], po…

电赛电装实习总结

电赛电装实习总结电赛最致命的问题是验收时仪器没有调好,可能是输入阻抗的问题,导致指标全部不对,最好还是拿自己做的时候用的仪器。 很多实验室仪器落灰,不常用的仪器大多是有问题的,用之前一定要矫正,没有验证…

量化投资 —— 实践 (续)

量化投资 —— 实践 (续)地址: https://item.taobao.com/item.htm?id=935049768542&pisk=gzwtYk13ZwbgtBLwXrfhnbarSWsHk6qZpPrWnq0MGyULcPgiocgXOXi-XmijcoijHyacbVqf7rexRAG4sq0ikxE4yMblETqabxkCraXu8SKU6Y…

30 ACwing 291 蒙德里安的梦想 题解

蒙德里安的梦想 题面 求把 \(N \times M\) 的棋盘分割成若干个 \(1 \times 2\) 的长方形,有多少种方案 例如当 \(N = 2, M = 4\) 时,共有 5 中方案。当 \(N = 2, M = 3\) 时,共有 3 种方案\(1 \le N, M \le 11\) 题…

21 ACwing 289 环路运输 题解

环路运输 题面 在一条环形公路旁均匀地分布着 N 座仓库,编号为 1∼N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 \(dist(i,j)=min(|i−j|,N−|i−j|)\),也就是逆时针或顺时针从 i 到 j 中较近的一种。 每座…

26 UVA1630 串折叠 Folding 题解

Folding 题面 折叠由大写字母组成的长度为 \(n\)(\(1\leqslant n\leqslant100\))的一个字符串,使得其成为一个尽量短的字符串,例如 AAAAAA 变成 6(A)。 这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYES…