npm的使用

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

      bash 复制代码
      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>:卸载指定依赖。
    • 安装

      bash 复制代码
      npm install -g yarn
  3. pnpm (Performant npm):

    • 功能pnpm 是一个高效的包管理工具,与 npm 兼容,但能更快地安装依赖,并且通过硬链接方式节省磁盘空间。

    • 优点

      • 磁盘空间节省:pnpm 通过共享相同的依赖,避免多次安装同一个依赖包。
      • 快速的依赖安装:由于缓存机制和硬链接的实现,依赖安装速度更快。
    • 常用命令

      • pnpm install:安装项目的依赖。
      • pnpm add <package>:添加一个依赖。
      • pnpm remove <package>:卸载一个依赖。
    • 安装

      bash 复制代码
      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 源:
bash 复制代码
npm get registry
设置 npm 源:

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

bash 复制代码
npm config set registry <registry-url>

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

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

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

bash 复制代码
npm install <package-name> --registry=<registry-url>

示例

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

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

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

二、npm 服务的运行

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

1. npm scripts 简介

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

json 复制代码
{
  "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 中,您可以这样定义环境变量:

    json 复制代码
    {
      "scripts": {
        "start": "NODE_ENV=production node server.js",
        "build": "NODE_ENV=production webpack"
      }
    }

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

  • 跨平台环境变量设置

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

    bash 复制代码
    npm install cross-env --save-dev

    package.json 中使用 cross-env

    json 复制代码
    {
      "scripts": {
        "build": "cross-env NODE_ENV=production webpack"
      }
    }
4. npm 运行服务的最佳实践
  • 使用 prepost 脚本

    npm 支持自动运行某些脚本之前或之后的钩子。例如,你可以定义一个 prestart 脚本,它会在 start 脚本之前自动运行:

    json 复制代码
    {
      "scripts": {
        "prestart": "echo 'Before start'",
        "start": "node server.js",
        "poststart": "echo 'After start'"
      }
    }
  • 组合脚本

    scripts 中可以组合多个命令。例如,使用 && 来顺序执行多个命令:

    json 复制代码
    {
      "scripts": {
        "start": "npm run build && node server.js"
      }
    }
  • 并行执行脚本

    如果需要并行运行多个命令,可以使用 npm-run-allconcurrently 这样的工具:

    bash 复制代码
    npm install npm-run-all --save-dev

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

    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

    bash 复制代码
    npm install -g pm2
  2. 启动应用

    bash 复制代码
    pm2 start app.js

    或者启动指定 npm 脚本:

    bash 复制代码
    pm2 start npm --name "my-app" -- run start
  3. 查看运行的进程

    bash 复制代码
    pm2 list
  4. 停止/重启应用

    bash 复制代码
    pm2 stop <app-name/id>
    pm2 restart <app-name/id>
  5. 监控应用

    bash 复制代码
    pm2 monit
  6. 查看日志

    bash 复制代码
    pm2 logs
  7. 持久化应用配置

    将当前应用配置保存到一个文件中,在系统重启后自动恢复:

    bash 复制代码
    pm2 save
  8. 重启所有保存的进程

    bash 复制代码
    pm2 resurrect
集群模式启动

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

bash 复制代码
pm2 start app.js -i max

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


2. Forever

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

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

    bash 复制代码
    npm install -g forever
  2. 启动应用

    bash 复制代码
    forever start app.js
  3. 列出所有运行的应用

    bash 复制代码
    forever list
  4. 停止应用

    bash 复制代码
    forever stop <pid/index>
  5. 查看日志

    bash 复制代码
    forever logs

3. Nodemon

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

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

    bash 复制代码
    npm install -g nodemon
  2. 启动应用

    bash 复制代码
    nodemon app.js
  3. 指定监控的文件/目录

    bash 复制代码
    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

    bash 复制代码
    npm install -g strongloop
  2. 启动应用

    bash 复制代码
    slc start app.js
  3. 监控应用

    bash 复制代码
    slc ctl status
  4. 查看应用日志

    bash 复制代码
    slc logs
适合场景:

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


5. Supervisor

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

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

    bash 复制代码
    npm install -g supervisor
  2. 启动应用

    bash 复制代码
    supervisor app.js

总结:

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

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

相关推荐
敲啊敲952729 分钟前
5.npm包
前端·npm·node.js
蜜獾云14 小时前
npm淘宝镜像
前端·npm·node.js
dz88i815 小时前
修改npm镜像源
前端·npm·node.js
小王码农记21 小时前
解决npm publish发布包后拉取时一直提示 Couldn‘t find any versions for “包名“ that matches “版本号“
前端·npm·node.js
樊南2 天前
npm安装electron依赖时卡顿,下载不下来
前端·electron·npm
没头发的卓卓3 天前
pnpm--他简直是超人!
前端·npm·前端工程化
changingshow4 天前
vue create 创建项目 提示 Failed to check for updates 淘宝 NPM 镜像站喊你切换新域名啦
javascript·vue.js·npm
【D'accumulation】4 天前
NPM国内镜像源多选择与镜像快速切换工具(nrm)介绍
前端·npm·node.js
野生派蒙4 天前
NVM:安装配置使用(详细教程)
前端·npm·node.js
Asurplus4 天前
【VUE】13、安装nrm管理多个npm源
npm·node.js·nvm·nrm