当前位置: 首页 > article >正文

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,灵活但对脑子有点挑战

相关文章:

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

一、Node.js 是什么&#xff1f; &#x1f63a; 定义&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;让你可以在浏览器之外运行 JavaScript 代码&#xff0c;主要用于服务端开发。 &#x1f63a;从计算机底层说&#xff1a;什么是“运…...

Xamarin入门笔记(Xamarin已经被MAUI取代)

初级代码游戏的专栏介绍与文章目录-CSDN博客 Xamarin入门 概述 环境 Android开发环境比较简单&#xff0c;自带模拟器&#xff0c;实体机打开开发者模式即可。 iOS开发环境比较复杂&#xff0c;必须搭配Mac电脑&#xff0c;Windows连接Mac开发可能有问题&#xff08;比如发…...

排查Oracle文件打开数过多

Oracle数据库在运行过程中&#xff0c;会打开大量的文件以执行其操作&#xff0c;包括数据文件、控制文件、日志文件等。如果Oracle用户打开的文件数过多&#xff0c;可能会引起系统性能下降。下面将深入分析Oracle用户文件打开数的优化策略&#xff0c;以帮助数据库管理员&…...

应用层协议http(无代码版)

目录 认识URL urlencode 和 urldecode HTTP 协议请求与响应格式 HTTP 的请求方法 GET 方法 POST 方法 HTTP 的状态码 HTTP 常见 Header Location 关于 connection 报头 HTTP版本 远程连接服务器工具 setsockopt 我们来学习应用层协议http。 虽然我们说, 应用层协…...

8.5 Q1|广州医科大学CHARLS发文 甘油三酯葡萄糖指数累积变化与 0-3期心血管-肾脏-代谢综合征人群中风发生率的相关性

1.第一段-文章基本信息 文章题目&#xff1a;Association between cumulative changes of the triglyceride glucose index and incidence of stroke in a population with cardiovascular-kidney-metabolic syndrome stage 0-3: a nationwide prospective cohort study 中文标…...

交叉编译tcpdump工具

1.导出交叉编译工具链 export PATH$PATH:/opt/rockchip/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 下载源码包libpcap-1.10.5&#xff0c;配置、并编译安装。 github仓库地址 ./configure --hostarm-linux CCarm-linux-gnueabihf-gcc --prefix$PWD/install …...

【Python-Day 20】揭秘Python变量作用域:LEGB规则与global/nonlocal关键字详解

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

golang 柯里化(Currying)

使用场景&#xff1a;参数在语义上属于不同组&#xff0c;Go 语法无法在单次调用中声明多组可变参数&#xff0c;通过柯里化可以实现分步接收参数。 有的参数是在不同时间段产生&#xff0c;使用Currying可以让函数记住&#xff08;缓存&#xff09;参数&#xff0c;避免应用代…...

无人机停机坪运行技术分析!

一、运行方式 1. 自动折叠与展开 部分停机坪采用二次折叠设计&#xff0c;通过传动组件实现自动折叠&#xff0c;缩小体积便于运输&#xff1b;展开后最大化停机面积&#xff0c;适应不同任务需求。例如&#xff0c;珠海双捷科技的专利通过两次折叠使停机坪体积最小化&#x…...

comfyui 工作流中 视频长度和哪些参数有关? 生成15秒的视频,再加上RTX4060 8G显卡,尝试一下

想再消费级显卡上生成15秒长视频&#xff0c;还是比较慢的&#xff0c;不过动漫的画质要求比较低 在ComfyUI中生成15秒视频需综合考虑视频参数配置、模型选择和硬件优化&#xff0c;尤其针对RTX 4060 8G显存的限制。 ⏱️ 一、影响视频长度的核心参数 总帧数&#xff08;video_…...

【Java Web】速通HTML

参考笔记: JavaWeb 速通HTML_java html页面-CSDN博客 目录 一、前言 1.网页组成 1 结构 2 表现 3 行为 2.HTML入门 1 基本介绍 2 基本结构 3. HTML标签 1 基本说明 2 注意事项 4. HTML概念名词解释 二、HTML常用标签汇总 + 案例演示 1. 字体标签 font (1)定义 (2)案例 2…...

在线制作幼教早教行业自适应网站教程

你想知道怎么做自适应网站吗&#xff1f;今天就来教你在线用模板做个幼教早教行业的网站哦。 首先得了解啥是自适应网站。简单说呢&#xff0c;自适应网站就是能自动匹配不同终端设备的网站&#xff0c;像手机、平板、电脑等。那如何做幼早教自适应网站呢&#xff1f; 在乔拓云…...

WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战

在WSL&#xff08;Windows Subsystem for Linux&#xff09;环境下一站式安装开发常用工具&#xff0c;能极大提升工作效率。接下来我将分步为你介绍如何在WSL中安装Java 11、Maven、Redis、MySQL、Nacos、RabbitMQ、RocketMQ、Elasticsearch&#xff08;ES&#xff09;和Node.…...

matlab天线阵列及GUI框架,可用于相控阵,圆形阵,矩形阵

构建天线阵列及GUI框架,可用于相控阵&#xff0c;圆形阵&#xff0c;矩形阵等 array/array.fig , 35384 array/array.m , 15582 array/circ_array.m , 5959 array/circular_array.m , 4238 array/fig8_5.m , 851 array/fig8_53.m , 441 array/fig8_7.m , 847 array/initialize…...

在 Ubuntu 终端中配置网络代理:优化 npm、apt等的下载速度

文章目录 背景步骤 1&#xff1a;测试网络连通性步骤 2&#xff1a;设置终端代理步骤 3&#xff1a;为 npm 配置代理步骤 4&#xff1a;为 apt 配置代理步骤 5&#xff1a;持久化代理设置注意事项总结 在开发中&#xff0c;网络环境有时会影响工具的下载速度&#xff0c;例如 …...

Apptrace:APP安全加速解决方案

2021 年&#xff0c;某知名电商平台在 “618” 大促期间遭遇 DDoS 攻击&#xff0c;支付系统瘫痪近 2 小时&#xff1b;2022 年&#xff0c;一款热门手游在新版本上线时因 CC 攻击导致服务器崩溃。观察发现&#xff0c;电商大促、暑期流量高峰和年末结算期等关键商业周期&#…...

Dockerfile 构建优化的方法

1.选择合适的 Base Image 使用轻量级基础镜像&#xff1a;尽量选择体积较小的基础镜像&#xff0c;例如 alpine 或 distroless。例如&#xff1a; FROM python:3.9-slim FROM alpine:3.14避免使用大型基础镜像&#xff1a;大型镜像会增加构建时间和镜像体积。 2. 减少镜像层数…...

Web攻防-SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错

知识点&#xff1a; 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-HTTP头&UA&Cookie 3、Web攻防-SQL注入-HTTP头&XFF&Referer 案例说明&#xff1a; 在应用中&#xff0c;存在增删改查数据的操作&#xff0c;其中SQL语句结构不一导致注入语句…...

Python中openpyxl库的基础解析与代码实例

目录 1. 前言 2. 安装openpyxl 3. 创建一个新的工作簿 4. 打开一个已有的工作簿 5. 读取和写入单元格 6. 操作工作表 7. 样式设置 8. 插入图像 9. 插入图表 10. 数据验证 11. 条件格式 12. 工作簿保护 13. 保存和关闭工作簿 14. 总结 1. 前言 在数据分析和处理的…...

GoldenDB管理节点zk部署

目录 1、准备阶段 1.1、部署规划 1.2、硬件准备 1.3、软件准备 1.4、网络端口开通 1.5、环境清理 2、实施阶段 2.1、操作系统配置 2.1.1、主机名修改 2.1.2、修改hosts文件 2.1.3、禁用防火墙 2.1.4、禁用selinux 2.1.5、禁用透明大页 2.1.6、资源限制调整 2.1.…...

mac mini m4命令行管理员密码设置

附上系统版本图 初次使用命令行管理员&#xff0c;让输入密码&#xff0c;无论是输入登录密码还是账号密码&#xff0c;都是错的&#xff0c;百思不得其解&#xff0c;去网上搜说就是登录密码啊 直到后来看到了苹果官方的文档 https://support.apple.com/zh-cn/102367 https…...

计算机网络之差错控制中的 CRC(循环冗余校验码)

文章目录 1 概述1.1 简介1.2 特点1.3 基本原则 2 实现步骤3 例题 1 概述 1.1 简介 CRC&#xff1a;Cyclic Redundancy Check&#xff08;循环冗余校验&#xff09;是计算机网络中常用的一种差错控制编码方法&#xff0c;用于检测数据传输或存储过程中可能出现的错误。 1.2 特…...

红客 Linux 系统性全解析

红客 Linux 系统性全解析&#xff1a;从工具到实战的网络安全防御体系 一、红客与 Linux 的深度关联 红客&#xff08;Ethical Hacker&#xff09;作为网络空间的守护者&#xff0c;其核心使命是通过模拟攻击行为发现系统漏洞&#xff0c;从而强化防御能力。Linux 操作系统因…...

【深度学习】7. 深度卷积神经网络架构:从 ILSVRC、LeNet 到 AlexNet、ZFNet、VGGNet,含pytorch代码结构

深度卷积神经网络架构&#xff1a;从 ILSVRC 到 AlexNet 在2012年Alex出现之前&#xff0c;主要还是依赖于SVM&#xff0c;同时数据工程成为分类任务中很大的一个部分&#xff0c;对数据处理的专家依赖性高。 一、ILSVRC 与图像分类任务背景 ILSVRC 简介 ILSVRC&#xff08…...

基于cornerstone3D的dicom影像浏览器 第二十七章 设置vr相机,复位视图

文章目录 前言一、VR视图设置相机位置1. 相机位置参数2. 修改mprvr.js3. 调用流程1) 修改Toolbar3D.vue2) 修改View3d.vue3) 修改DisplayerArea3D.vue 二、所有视图复位1.复位流程说明2. 调用流程1) Toolbar3D中添加"复位"按钮&#xff0c;发送reset事件2) View3d.vu…...

2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。、 目录 匿名[校招]高级安全工程师(代码审计安全评估) 渗透基础 1. 自我介绍 2. SQL注入写Shell&#xff08;分数…...

Jenkins实践(7):Publish over SSH功能

在 Jenkins 中使用Publish over SSH功能,需要安装对应的插件。以下是详细步骤: 1. 安装 Publish over SSH 插件 进入 Jenkins 管理界面 → Manage Jenkins → Manage Plugins。切换到 Available 选项卡,搜索 "Publish Over SSH"。勾选插件并点击 Install without…...

SQLite 中文写入失败问题总结

SQLite 中文写入失败问题总结与解决方案 在 Windows 下使用 C 操作 SQLite 数据库时&#xff0c;中文字段经常出现 写入成功但内容显示为 BLOB 或 乱码 的问题。根本原因在于 SQLite 要求字符串以 UTF-8 编码 存储&#xff0c;而默认的 std::string 中文通常是 GB2312/ANSI 编…...

JavaScript篇:闭包:JavaScript中的魔法口袋,装下你的编程智慧

大家好&#xff0c;我是江城开朗的豌豆&#xff0c;一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术&#xff0c;并深入掌握Vue、React、Uniapp、Flutter等主流框架&#xff0c;能够高效解决各类前端开发问题。在我的技术栈中&#xff0c;除了…...

ubuntu系统安装Pyside6报错解决

目录 1&#xff0c;问题&#xff1a; 2&#xff0c;解决方法&#xff1a; 2.1 首先查看pypi是否有你需要包的镜像&#xff1a; 2.2 其它方案&#xff1a; 2.3 如果下载很慢&#xff0c;可以换源&#xff1a; 2.4 查看系统架构 Windows Ubuntu 1&#xff0c;问题&#xf…...