JavaScript、Node.js、npm 和 nvm:彻底理清他们的历史与关系

刚接触的新手小伙伴是不是很迷茫,作为一个c/c++工程师,刚开始接触这东西也被绕晕过,今天彻底讲清楚他们的历史与关系。

1. JavaScript:从浏览器脚本语言到全栈开发

JavaScript 的诞生

JavaScript 诞生于 1995 年,由 Brendan Eich 在 Netscape 公司开发,最初的目的是为网页添加动态效果。它是一种解释型、弱类型的语言,最初只运行在浏览器上,主要用于处理前端交互,例如:

复制代码
document.getElementById("btn").addEventListener("click", function() {
    alert("Hello, JavaScript!");
});

发展与标准化

JavaScript 迅速流行,并于 1997 年由 ECMA 组织标准化,形成了 ECMAScript(简称 ES)。ES5、ES6(ES2015)及其后的版本不断增强了 JavaScript 的能力,使其从一个简单的脚本语言发展为强大的编程语言。

但问题来了,JavaScript 只能运行在浏览器中,限制了它的应用场景。而这也引出了 Node.js 的诞生。


2. Node.js:让 JavaScript 走向后端

Node.js 的诞生

2009 年,Ryan Dahl 开发了 Node.js,它是一个基于 Google Chrome V8 引擎的 JavaScript 运行时,使 JavaScript 可以在服务器端运行。其核心特性包括:

  • 非阻塞 I/O:使用事件驱动模型,提高了高并发处理能力。
  • 单线程架构:通过异步编程模型优化性能。

使用 Node.js,我们可以编写服务器端代码,比如一个简单的 HTTP 服务器:

复制代码
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello, Node.js!');
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

从此,JavaScript 变成了全栈开发语言,可以同时用于前端和后端。


3. npm:Node.js 生态的管理器

什么是 npm?

npm(Node Package Manager) 是 Node.js 的默认包管理器,它可以:

  1. 安装 JavaScript 库或工具。
  2. 管理项目依赖。
  3. 运行自定义脚本。

当我们安装 Node.js 时,npm 也会自动安装。

npm 的使用示例

  1. 检查 npm 版本

    复制代码
    npm -v
  2. 初始化项目(创建 package.json

    复制代码
    npm init -y
  3. 安装依赖

    例如,我们安装 express 这个后端框架:

    复制代码
    npm install express
  4. 全局安装工具

    复制代码
    npm install -g nodemon
  5. 运行 npm 脚本 (在 package.json 里定义脚本)

    复制代码
    "scripts": {
      "start": "node app.js"
    }

    然后运行:

    复制代码
    npm run start

npm 的兴起,极大地推动了 JavaScript 生态的发展,方便了开发者管理项目和依赖。但一个问题是,Node.js 版本不断更新,不同项目可能需要不同的 Node.js 版本,这就引出了 nvm


4. nvm:管理 Node.js 版本的工具

为什么需要 nvm?

不同项目可能需要不同版本的 Node.js,例如:

  • A 项目 需要 Node.js 14.x
  • B 项目 需要 Node.js 18.x

如果没有 nvm,手动安装和切换 Node.js 版本将会非常麻烦。因此,nvm(Node Version Manager) 诞生了,它允许在同一台机器上管理多个 Node.js 版本,并且可以随时切换。

nvm 的安装与使用

  1. 安装 nvm (Windows 可使用 nvm-windows

    • Linux/macOS:

      复制代码
      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
      source ~/.bashrc
    • Windows(使用 nvm-windows):
      下载并安装 nvm-windows

  2. 查看可用的 Node.js 版本

    复制代码
    nvm list-remote
  3. 安装特定版本的 Node.js

    复制代码
    nvm install 18.16.1
  4. 切换 Node.js 版本

    复制代码
    nvm use 18.16.1
  5. 查看当前使用的 Node.js 版本

    复制代码
    node -v
  6. 查看已安装的 Node.js 版本

    复制代码
    nvm list

nvm 让我们可以灵活地管理不同版本的 Node.js,特别适用于有多个 Node.js 项目或需要兼容不同版本的情况。


5. 关系梳理:JavaScript、Node.js、npm 和 nvm

工具 作用
JavaScript 一种编程语言,最初用于前端,后被扩展到后端
Node.js JavaScript 的运行时环境,使其可以运行在服务器端
npm Node.js 的包管理器,负责安装和管理依赖
nvm Node.js 版本管理工具,帮助在不同项目中切换 Node.js 版本

从 JavaScript 发展到 Node.js,再到 npm 和 nvm,我们可以看到 JavaScript 生态的演变:

  1. JavaScript 最初只在浏览器中运行,负责前端交互。
  2. Node.js 让 JavaScript 可以在服务器端运行,拓展了应用范围。
  3. npm 让 JavaScript 生态更加丰富,方便管理第三方库和工具。
  4. nvm 解决了 Node.js 版本管理的问题,使得开发更加灵活。

如今,JavaScript 已经成为最流行的编程语言之一,而 Node.js、npm 和 nvm 进一步巩固了它在全栈开发中的地位。

相关推荐
Pu_Nine_91 小时前
10 分钟上手 ECharts:从“能跑”到“生产级”的完整踩坑之旅
前端·javascript·echarts·css3·html5
csdn_aspnet1 小时前
使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)
npm·node.js
Juchecar2 小时前
AI教你常识之 ESM + Express + EJS + 表单POST + CSV文件
node.js
xiaopengbc2 小时前
在Webpack中,如何在不同环境中使用不同的API地址?
前端·webpack·node.js
Gogo8162 小时前
java与node.js对比
java·node.js
li35743 小时前
React 核心 Hook 与冷门技巧:useReducer、useEffect、useRef 及 is 属性全解析
前端·javascript·react.js
快乐是Happy3 小时前
分享一个非常实用的防止重复提交操作
前端·javascript
王蛋1113 小时前
前端工作问题或知识记录
前端·npm·node.js
可子是我的小猫3 小时前
【JS】模块(二)
javascript
云枫晖3 小时前
JS核心知识-执行上下文
前端·javascript