npx 与 npm 区别

一、 一句话总结区别

|-----|----------------------------|
| 工具 | 作用 |
| npm | 安装包(比如下载 `@angular/cli`) |
| npx | 执行包里的命令(比如运行 `ng` 命令) |

👉 就像:

`npm` 是"下载软件"

`npx` 是"运行软件"

二、详细对比

|---------|----------------------|------------------------------------|
| 特性 | npm | npx |
| 全称 | Node Package Manager | Node Package execute |
| 主要用途 | 安装、管理依赖包 | 执行包中的命令 |
| 是否需要先安装 | 是(`npm install`) | 否(可直接运行) |
| 执行命令 | ❌不能直接运行 `ng` | 可以运行 `ng`、`create-react-app` 等 |
| 自动安装 | ❌ | 如果没安装,会临时下载并运行 |

三、 举个实际例子

场景:你想创建一个 Angular 项目

❌ 旧方式(依赖全局安装)

bash 复制代码
npm install -g @angular/cli     # 先全局安装
ng new my-app                   # 再运行命令

问题:

  • 全局只能有一个版本

  • 容易版本冲突(比如你项目是 v15,但全局是 v10)

✅ 现代方式(使用 `npx`)

bash 复制代码
npx @angular/cli@latest new my-app

npx 会自动:

  1. 检查本地有没有 `@angular/cli`

  2. 没有?→ 临时下载 `@angular/cli@latest`

  3. 运行 `ng new my-app`

  4. 完成后可清理缓存

无需全局安装,每个项目用自己需要的版本。

四、 npx 的强大功能

  1. 无需全局安装,直接运行命令
bash 复制代码
npx create-react-app my-app
npx vue@3 create my-vue-app
npx http-server

这些命令都不需要你提前 `npm install -g`。

  1. 自动使用本地包(优先)

如果你的项目已经安装了 `@angular/cli`,运行:

bash 复制代码
npx ng serve

npx 会:

  • 先找 `node_modules/.bin/ng`

  • 找到就用本地的 CLI

  • 找不到才去下载

前提是:确保你用的是项目指定的版本~

  1. 临时运行某个版本的命令
bash 复制代码
npx @angular/cli@10 ng new old-project --strict=false
npx @angular/cli@15 ng new new-project

可以同时测试不同版本的 CLI,互不干扰。

  1. 运行一次性工具
bash 复制代码
npx serve                    # 启动一个静态服务器
npx cowsay "Hello!"          # 打印牛说话(趣味工具)
npx json-server --watch db.json  # 模拟 API

用完就走,不用安装。

五、 `npx` vs `npm run` 的区别

|---------------|-----------------------------------------------|
| 命令 | 说明 |
| npx ng serve | 直接执行 `ng` 命令(从本地或远程) |
| npm run serve | 执行 `package.json` 中定义的 `scripts.serve` 脚本 |

例如:

javascript 复制代码
"scripts": {
  "serve": "ng serve"
}

那么:

bash 复制代码
npm run serve

等价于:

bash 复制代码
npx ng serve

推荐在 `package.json` 中定义脚本,然后用 `npm run` 调用。

六、 最佳实践(推荐)

|-------|-------------------------------------|
| 场景 | 做法 |
| 创建新项目 | npx @angular/cli@latest new my-app |
| 启动项目 | npm run start`(或 `npx ng serve`) |
| 构建项目 | npm run build |
| 查看版本 | npx ng version |
| 临时工具 | npx http-server |

七、 总结

|----------------|-------------------------|
| 问题 | 回答 |
| npx 是什么 | 用来执行npm 包中的命令 |
| npx和 npm区别 | `npm` 是安装,`npx` 是运行 |
| 为什么要用 `npx`? | 避免全局安装、解决版本冲突、临时使用工具 |
| npx ng` 安全吗 | 安全,优先使用本地 CLI,不会受全局干扰 |

相关推荐
涔溪8 分钟前
如何解决微前端架构中主应用和微应用的通信问题?
前端·架构
重铸码农荣光30 分钟前
深入理解 JavaScript 原型链:从 Promise.all 到动态原型的实战探索
前端·javascript·promise
我叫黑大帅37 分钟前
什么叫可迭代对象?为什么要用它?
前端·后端·python
颜渊呐38 分钟前
Vue3 + Less 实现动态圆角 TabBar:从代码到优化实践
前端·css
PineappleCoder41 分钟前
pnpm 凭啥吊打 npm/Yarn?前端包管理的 “硬链接魔法”,破解三大痛点
前端·javascript·前端工程化
fruge1 小时前
前端文档自动化:用 VitePress 搭建团队技术文档(含自动部署)
运维·前端·自动化
CoolerWu1 小时前
TRAE SOLO实战成功展示&总结:一个所见即所得的笔记软体
前端·javascript
Cassie燁2 小时前
el-button源码解读1——为什么组件最外层套的是Vue内置组件Component
前端·vue.js
vx_bscxy3222 小时前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计
北极糊的狐2 小时前
Vue3 子组件修改父组件传递的对象并同步的方法汇总
前端·javascript·vue.js