Node.js 和 npm 之间的关系非常密切,它们通常一起使用,但它们是独立的工具,有不同的功能:

  1. Node.js:Node.js 是一个运行时环境,它允许你在服务器端运行 JavaScript。传统上,JavaScript 是一种用于浏览器端的语言,但 Node.js 使得你可以使用 JavaScript 来编写后端应用程序、构建服务器、处理文件等。

  2. npm(Node Package Manager):npm 是 Node.js 的包管理工具,它让你可以方便地下载、安装、管理、更新项目所需的各种 JavaScript 库和工具。npm 还包含一个在线的包注册表(npmjs.com),供开发者分享代码和复用现有的解决方案。

它们的关系:

  • Bundled Together:npm 与 Node.js 是捆绑在一起的,当你安装 Node.js 时,会自动安装 npm。
  • 依赖管理:npm 帮助管理 Node.js 项目所需的依赖库和工具。通过运行 npm install,它可以下载项目中列出的所有依赖项。
  • 脚本管理:npm 还用于管理和执行项目中的脚本。例如,你可以定义 npm run startnpm run build 来启动项目或构建项目。

常用命令:

  • npm install [package]:安装一个包并将其添加到 node_modules 文件夹中。
  • npm init:初始化一个新的 Node.js 项目,创建 package.json 文件。
  • npm update:更新项目中的依赖项。

总结来说,Node.js 是一个运行 JavaScript 的平台,而 npm 则是帮助管理和共享 JavaScript 代码的工具,它们相辅相成,构成了现代 JavaScript 开发的核心工具链。


npx 和 Node.js 以及 npm 的关系紧密,主要用于简化执行 Node.js 命令和管理项目依赖。具体来说:

1. npm (Node Package Manager):

npm 是 Node.js 的包管理工具,管理和安装项目依赖。npx 是 npm 提供的一个附加工具,通常随着 npm 一起安装。在 npm 5.2.0 及更高版本中自动安装了 npx

2. npx (Node Package eXecute):

npx 是一种帮助开发者方便执行 npm 包中可执行文件的工具,避免了全局安装的麻烦。它的主要目的是在 Node.js 项目中运行命令时更简便和高效,尤其是那些不想全局安装的工具或命令。

主要功能和作用:

  1. 直接运行未安装的包
    使用 npx,可以直接运行一个未安装的 npm 包,而不用先用 npm install 来安装。例如,运行 npx create-react-app my-app 时,不需要先全局安装 create-react-app 包,npx 会自动从 npm 上下载并运行它,完成后也不会全局保存这个包。

  2. 避免全局安装
    通过 npx,可以避免过多的全局安装工具。例如,开发时只需要临时使用的工具可以通过 npx 执行,避免污染全局环境。

  3. 执行本地依赖包中的命令
    npx 允许你运行本地安装的 npm 包中的可执行文件,而不需要将它们添加到系统的 PATH 中。例如,在项目中本地安装了某个包后,可以通过 npx package-name 来运行。

常用场景:

  1. 运行一次性命令
    不需要永久安装的工具可以通过 npx 直接运行,比如 npx http-server,这会启动一个本地服务器,服务器关闭后不会留下额外的依赖。

  2. 快速生成项目模板
    npx 常用于快速创建项目,例如使用 npx create-react-appnpx vue create 来生成 React 或 Vue 项目的模板。

  3. 运行特定版本的命令
    可以通过 npx 指定某个特定版本的包来运行命令,甚至可以跳过项目本地安装的版本。

总结:

  • Node.js 是运行 JavaScript 的环境。
  • npm 是包管理工具,负责安装和管理项目依赖。
  • npx 则是一个执行工具,帮助简化命令的运行和包的管理,不需要提前安装包,也能运行它们。

npx 使得在 Node.js 项目中执行命令更加灵活和简便,特别适合那些不需要长期依赖的命令行工具。


在开发过程中,为了更好地管理和切换 Node.js 版本及 npm 包管理工具,有一些常用的工具可以帮助我们更加高效地管理它们。以下是关于 Node.jsnpm 管理工具的介绍:

Node.js 的管理工具:

  1. nvm (Node Version Manager):

    • 功能:nvm 是最常用的 Node.js 版本管理工具,它允许你在同一台机器上安装和切换多个版本的 Node.js。
    • 优点
      • 可以轻松安装、卸载和切换不同的 Node.js 版本。
      • 针对不同的项目,可以使用不同的 Node.js 版本,而不影响全局环境。
    • 常用命令
      • nvm install <version>:安装指定版本的 Node.js。
      • nvm use <version>:切换到指定版本。
      • nvm ls:列出已安装的 Node.js 版本。
      • nvm uninstall <version>:卸载指定版本的 Node.js。
    • 安装nvm GitHub
  2. n (Node Version Manager 简化版):

    • 功能n 是一个类似于 nvm 的工具,但更为简化。它适用于需要快速切换和管理 Node.js 版本的场景。
    • 优点
      • 安装和使用非常简便,只需要通过 npm 全局安装即可。
      • 快速切换 Node.js 版本,无需重新开终端或执行其他命令。
    • 常用命令
      • n <version>:安装并切换到指定版本的 Node.js。
      • n latest:安装并切换到最新的 Node.js 版本。
      • n lts:安装并切换到最新的长期支持 (LTS) 版本。
    • 安装:通过 npm 全局安装 n
      npm install -g n
      
  3. fnm (Fast Node Manager):

    • 功能fnm 是一个快速的 Node.js 版本管理工具,特别适合那些需要在不同 Node.js 版本之间频繁切换的开发者。
    • 优点
      • 速度非常快,切换 Node.js 版本时无需等待太久。
      • 支持跨平台使用(macOS、Linux 和 Windows)。
    • 常用命令
      • fnm install <version>:安装指定版本的 Node.js。
      • fnm use <version>:切换到指定版本的 Node.js。
      • fnm list:列出所有已安装的 Node.js 版本。
    • 安装fnm 官方文档

npm 的管理工具:

  1. npm 自身的版本管理

    • npm 自带版本管理功能,允许你安装和切换 npm 版本。
    • 常用命令
      • npm install -g npm@<version>:安装指定版本的 npm。
      • npm ls -g npm:查看全局安装的 npm 版本。
      • npm update -g npm:更新到最新版本的 npm。
  2. yarn

    • 功能:Yarn 是 Facebook 推出的 npm 替代工具,旨在解决 npm 一些效率和一致性的问题。
    • 优点
      • 更快的包安装速度:Yarn 可以并行化下载依赖,并且通过缓存减少重复的下载。
      • 确定性依赖树:Yarn 使用 yarn.lock 文件,确保每次安装时都使用相同版本的依赖。
      • 稳定性:Yarn 在处理大型项目时比 npm 更加稳定。
    • 常用命令
      • yarn install:安装项目的所有依赖。
      • yarn add <package>:添加并安装依赖。
      • yarn remove <package>:卸载指定依赖。
    • 安装
      npm install -g yarn
      
  3. pnpm (Performant npm):

    • 功能pnpm 是一个高效的包管理工具,与 npm 兼容,但能更快地安装依赖,并且通过硬链接方式节省磁盘空间。
    • 优点
      • 磁盘空间节省:pnpm 通过共享相同的依赖,避免多次安装同一个依赖包。
      • 快速的依赖安装:由于缓存机制和硬链接的实现,依赖安装速度更快。
    • 常用命令
      • pnpm install:安装项目的依赖。
      • pnpm add <package>:添加一个依赖。
      • pnpm remove <package>:卸载一个依赖。
    • 安装
      npm install -g pnpm
      

总结:

  • Node.js 版本管理工具:nvm、n、fnm 等工具帮助你轻松管理多个 Node.js 版本,并在不同项目之间快速切换。
  • npm 替代工具:yarn 和 pnpm 等工具提升了包管理的效率和稳定性,在某些情况下比 npm 表现更佳。

选择适合的工具可以根据你的开发场景以及项目需求来定,通常 nvmyarn 是最常用的组合,但 pnpm 近年来也逐渐流行。


在 Node.js 开发中,管理 npm 源npm 服务 是两个非常重要的环节。下面分别介绍如何管理 npm 的源(registry)和 npm 服务(scripts、包发布等)的运行。


一、管理 npm 源(Registry)

npm 使用一个中央注册表(registry)来管理所有的包和包的元数据。默认情况下,npm 使用 https://registry.npmjs.org/ 作为默认源,但有时可能需要使用不同的源,比如为了加快安装速度、访问私有包,或者切换到镜像源。

1. 常见 npm 源
  • 官方源https://registry.npmjs.org/(默认)
  • 淘宝镜像源https://registry.npmmirror.com/(适合中国用户,加速 npm 安装)
  • 私有 npm 源:公司内部的私有注册表,比如 Verdaccio 等工具可以帮助搭建私有 npm 源。
2. 更换 npm 源
查看当前的 npm 源:
npm get registry
设置 npm 源:

可以通过以下命令将 npm 源设置为指定的 URL。

npm config set registry <registry-url>

示例:将 npm 源设置为淘宝的 npm 镜像源:

npm config set registry https://registry.npmmirror.com/
恢复为官方源:
npm config set registry https://registry.npmjs.org/
临时使用不同源:

在某些情况下,你可以临时使用不同的源执行安装命令,而无需全局修改。

npm install <package-name> --registry=<registry-url>

示例

npm install lodash --registry=https://registry.npmmirror.com/
3. 管理多个源工具:nrm

nrm 是一个 npm 源管理工具,允许你方便地在不同的源之间切换。

安装 nrm
npm install -g nrm
查看可用的源:
nrm ls
切换源:
nrm use taobao
添加自定义源:
nrm add <source-name> <registry-url>
删除源:
nrm del <source-name>
测试 npm 源的速度:
nrm test

二、npm 服务的运行

npm 服务通常是通过 npm scripts 来定义和管理的。package.json 文件中的 scripts 字段定义了一些可以通过 npm run <script-name> 来执行的任务,例如启动开发服务器、构建项目、运行测试等。

1. npm scripts 简介

package.json 文件中,npm 会从项目的根目录开始执行指定的命令,scripts 字段可以包含各种自定义命令脚本。 例如:

{
  "scripts": {
    "start": "node server.js",
    "build": "webpack --config webpack.config.js",
    "test": "jest",
    "build:ci": "node ./script/index.js"
  }
}

这些脚本可以通过 npm run 执行:

  • npm run start:启动服务器。
  • npm run build:执行构建。
  • npm run test:运行测试。
2. 内置 npm 命令

除了自定义的 scripts,npm 还提供一些常见的内置命令:

  • npm start:如果 package.json 中有 scripts.start,则可以直接运行 npm start,不用写 npm run start
  • npm test:同样,如果有 scripts.test,可以直接运行 npm test
  • npm stop:如果定义了 scripts.stop,可以通过 npm stop 停止服务。
3. 环境变量

通过 npm scripts 执行时,您可以使用 process.env 访问环境变量。

  • 在脚本中使用环境变量
    package.json 中,您可以这样定义环境变量:

    {
      "scripts": {
        "start": "NODE_ENV=production node server.js",
        "build": "NODE_ENV=production webpack"
      }
    }
    

    上述示例将在 startbuild 脚本中设置 NODE_ENVproduction

  • 跨平台环境变量设置
    对于跨平台项目(例如在 Windows 和 Linux 上运行),推荐使用 cross-env 包来兼容设置环境变量:

    npm install cross-env --save-dev
    

    package.json 中使用 cross-env

    {
      "scripts": {
        "build": "cross-env NODE_ENV=production webpack"
      }
    }
    
4. npm 运行服务的最佳实践
  • 使用 prepost 脚本
    npm 支持自动运行某些脚本之前或之后的钩子。例如,你可以定义一个 prestart 脚本,它会在 start 脚本之前自动运行:

    {
      "scripts": {
        "prestart": "echo 'Before start'",
        "start": "node server.js",
        "poststart": "echo 'After start'"
      }
    }
    
  • 组合脚本
    scripts 中可以组合多个命令。例如,使用 && 来顺序执行多个命令:

    {
      "scripts": {
        "start": "npm run build && node server.js"
      }
    }
    
  • 并行执行脚本
    如果需要并行运行多个命令,可以使用 npm-run-allconcurrently 这样的工具:

    npm install npm-run-all --save-dev
    

    然后在 package.json 中这样定义:

    {
      "scripts": {
        "build": "npm-run-all --parallel build:*",
        "build:css": "sass styles.scss styles.css",
        "build:js": "webpack --config webpack.config.js"
      }
    }
    

总结:

  • npm 源的管理:可以通过 npm config set registry 命令或 nrm 工具来方便地切换不同的 npm 源,以适应不同的网络环境和需求。
  • npm 服务的运行:通过 npm scripts 来定义、管理和运行项目的各种任务脚本。灵活使用内置命令、环境变量和脚本组合工具,可以提升开发和运行效率。

在服务端,管理通过 npm 运行的 Node.js 程序需要考虑进程的生命周期、自动化部署、日志管理、故障恢复等问题。为了解决这些问题,开发者通常使用一些专门的工具来管理服务端运行的 npm 程序。这些工具不仅可以管理应用的启动和停止,还能提供更强大的监控和恢复能力。以下是一些常见的服务端 npm 程序管理工具:


1. PM2 (Process Manager 2)

PM2 是最流行的 Node.js 应用进程管理工具之一,广泛用于生产环境中。它支持进程管理、日志记录、负载均衡、集群模式等功能,并可以与容器和云环境集成。

PM2 的主要功能
  • 进程管理:可以启动、停止、重启和监控应用进程。
  • 守护进程模式:在应用崩溃或异常退出时,PM2 能自动重启应用,确保服务保持在线。
  • 集群模式:支持多核 CPU 的 Node.js 应用集群,提升应用性能和可用性。
  • 日志管理:自动记录应用的 stdout 和 stderr 输出,可以通过 pm2 logs 查看日志。
  • 内存管理:支持内存限制,当应用内存超出设定值时自动重启。
  • 负载均衡:在集群模式下自动实现负载均衡。
  • 监控:通过 PM2 Monitor 可以实时监控应用的 CPU 和内存使用情况。
  • 持久化进程:PM2 可以将进程保存为 JSON 配置文件,并在系统重启后自动恢复所有应用。
常用命令
  1. 安装 PM2

    npm install -g pm2
    
  2. 启动应用

    pm2 start app.js
    

    或者启动指定 npm 脚本:

    pm2 start npm --name "my-app" -- run start
    
  3. 查看运行的进程

    pm2 list
    
  4. 停止/重启应用

    pm2 stop <app-name/id>
    pm2 restart <app-name/id>
    
  5. 监控应用

    pm2 monit
    
  6. 查看日志

    pm2 logs
    
  7. 持久化应用配置
    将当前应用配置保存到一个文件中,在系统重启后自动恢复:

    pm2 save
    
  8. 重启所有保存的进程

    pm2 resurrect
    
集群模式启动

PM2 可以在多核 CPU 上运行应用,充分利用硬件资源:

pm2 start app.js -i max

-i max 表示使用最大 CPU 核心数。


2. Forever

forever 是另一个 Node.js 应用进程管理工具,它的主要功能是确保服务在后台永远运行。虽然它功能较为简化,但对于需要简单保持服务长时间运行的项目来说非常适合。

Forever 的主要功能
  • 保持服务永远运行:如果服务崩溃或异常退出,forever 会自动重启应用。
  • 日志管理:自动记录应用的输出日志,便于调试和分析。
  • 轻量化:相比 PM2,forever 更加轻量级,配置和使用也相对简单。
常用命令
  1. 安装 Forever

    npm install -g forever
    
  2. 启动应用

    forever start app.js
    
  3. 列出所有运行的应用

    forever list
    
  4. 停止应用

    forever stop <pid/index>
    
  5. 查看日志

    forever logs
    

3. Nodemon

nodemon 是一个开发时常用的工具,它在代码变动时自动重启 Node.js 应用,适合开发环境。虽然 nodemon 主要用于开发过程中,但在某些简单的生产环境中,它也可以作为服务管理工具。

Nodemon 的主要功能
  • 自动重启:当检测到文件变动时,自动重启 Node.js 应用。
  • 监控特定文件:可以设置只监控特定的文件或目录。
  • 兼容 PM2:在开发环境中,可以配合 PM2 或其他工具一起使用,提升开发效率。
常用命令
  1. 安装 Nodemon

    npm install -g nodemon
    
  2. 启动应用

    nodemon app.js
    
  3. 指定监控的文件/目录

    nodemon --watch src/ app.js
    
适合场景:
  • 开发时自动重启应用,提升开发效率。
  • 较为简单的服务环境下,可以用来监控并重启应用。

4. StrongLoop Process Manager (slc)

StrongLoop 是 IBM 旗下用于构建和管理 Node.js API 微服务的工具链。StrongLoop 的 Process Manager (slc) 可以管理 Node.js 进程,同时提供内置的监控和故障恢复功能,主要针对企业级应用。

主要功能
  • 进程管理和监控:实时查看应用的健康状态。
  • 负载均衡:支持多核负载均衡,适用于高负载应用。
  • 监控和调优:内置监控系统,可以调优 Node.js 应用的性能。
常用命令
  1. 安装 StrongLoop CLI

    npm install -g strongloop
    
  2. 启动应用

    slc start app.js
    
  3. 监控应用

    slc ctl status
    
  4. 查看应用日志

    slc logs
    
适合场景:

StrongLoop 更适合企业级应用和微服务架构,它集成了 API 构建工具,适用于需要强大监控、调优和企业级支持的环境。


5. Supervisor

supervisor 是一个简化版的进程管理工具,功能类似 nodemon,它能监视代码变化并自动重启服务。相比 nodemon,它更为轻量,适用于小型项目或开发环境。

主要功能
  • 自动重启:在代码发生变更时自动重启服务。
  • 适用于开发环境:适合在开发时监控代码变化。
常用命令
  1. 安装 Supervisor

    npm install -g supervisor
    
  2. 启动应用

    supervisor app.js
    

总结:

  • PM2 是功能最强大的服务端进程管理工具,适用于生产环境,提供进程守护、集群模式、负载均衡和日志管理等功能。
  • Forever 是一个简化版的工具,适合需要简单保持服务运行的场景。
  • NodemonSupervisor 更适合开发环境,能够监控代码变动并自动重启。
  • StrongLoop 适合企业级应用,集成了更多高级监控和优化功能。

对于大部分生产环境,PM2 是最推荐的工具,因为它不仅功能丰富,而且易于使用。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部