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 进一步巩固了它在全栈开发中的地位。

相关推荐
像风一样自由20205 小时前
HTML与JavaScript:构建动态交互式Web页面的基石
前端·javascript·html
浪裡遊5 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
whale fall6 小时前
npm install安装的node_modules是什么
前端·npm·node.js
会飞的鱼先生6 小时前
Node.js-http模块
网络协议·http·node.js
Liudef067 小时前
2048小游戏实现
javascript·css·css3
独立开阀者_FwtCoder9 小时前
【Augment】 Augment技巧之 Rewrite Prompt(重写提示) 有神奇的魔法
前端·javascript·github
用户3521802454759 小时前
MCP极简入门:node+idea运行简单的MCP服务和MCP客户端
node.js·ai编程
我想说一句9 小时前
事件机制与委托:从冒泡捕获到高效编程的奇妙之旅
前端·javascript
汤姆Tom9 小时前
JavaScript reduce()函数详解
javascript
小飞悟9 小时前
你以为 React 的事件很简单?错了,它暗藏玄机!
前端·javascript·面试