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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…