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

相关推荐
稀里糊涂的全栈1 小时前
腾讯位置服务多边形绘制、编辑、删除
前端·javascript·vue.js
练习两年半的工程师4 小时前
使用React和google gemini api 打造一个google gemini应用
javascript·人工智能·react.js
勘察加熊人5 小时前
angular九宫格ui
javascript·ui·angular.js
左钦杨7 小时前
Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面
前端·javascript·vue.js
uglyduckling04128 小时前
小程序构建NPM失败
前端·小程序·npm
烛阴8 小时前
JavaScript 调度:setTimeout 和 setInterval
前端·javascript
難釋懷8 小时前
JavaScript基础-获取元素
开发语言·javascript
伟笑8 小时前
npm 报错 unable to resolve dependency tree
前端·npm·node.js
beibeibeiooo9 小时前
【ES6】04-对象 + 类 + 模板字符串 + 解构 + 字符串
前端·javascript·es6
imkaifan9 小时前
7、vue3做了什么
javascript·vue.js·ecmascript