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

相关推荐
汉堡大王95271 分钟前
JavaScript类型侦探:四大神器让你一眼看穿变量真身
前端·javascript
Debroon4 分钟前
从零开始手写ReAct Agent
前端·javascript·react.js
软件技术NINI5 分钟前
html css js网页制作成品——成毅html+css+js 5页附源码
javascript·css·html
CryptoRzz13 分钟前
对接墨西哥股票市场 k线图表数据klinechart 数据源API
开发语言·javascript·web3·ecmascript
chilavert31817 分钟前
技术演进中的开发沉思-230 Ajax:Prototype.js 重构原生 DOM
开发语言·前端·javascript
CaliXz26 分钟前
取出51.la统计表格内容为json数据 api
java·javascript·json
Rysxt_26 分钟前
Vue 集成富文本编辑器教程
前端·javascript·vue.js·富文本
开发者小天29 分钟前
React中的受控组件示例
前端·javascript·react.js
奋斗吧程序媛30 分钟前
request请求相关
前端·javascript·vue.js
光影少年37 分钟前
用vite还是webpack多,vite为什么快
前端·webpack·node.js