npm和npx:这对CP你磕明白了吗?

147 阅读3分钟

jimeng-2025-05-09-407-cp关系,动画搞笑风格.jpeg 大家好,今天我们来聊聊npm和npx这对"包"治百病的黄金搭档。用了多年Node.js,却还在npm和npx之间反复横跳,今天我们就来彻底拆散这对CP...啊不是,彻底搞清楚它们的关系!

一、先看脸:这对CP的基本人设

npm - Node.js 的默认包管理器(你的贴心管家):

【全局或本地安装依赖包】

  • 大名:Node Package Manager
  • 特长:安装、卸载、管理、发布种Node.js包
  • 口头禅:"让我先把这个包装好"

npx - npm 5.2.0+ 版本自带的工具(你的随叫随到工具人):

【主要用于临时执行 Node.js 包】

  • 大名:Node Package eXecute
  • 特长:临时执行各种Node.js包
  • 口头禅:"用完我就跑"

举个栗子🌰:

# npm要先"娶回家"(安装)
npm install -g create-react-app
create-react-app my-app

# npx直接"闪婚"(临时使用)
npx create-react-app my-app

看到没?npx就是那个不愿意负责任的"渣男"工具!(大误)

二、深入CP日常:使用场景大PK

1. 安装依赖

npm像个囤积症患者:

npm install lodash  # 把lodash请回家供着

npx像个极简主义者:

npx lodash --version  # 用完就扔

2. 执行命令

npm需要媒人(package.json)介绍:

"scripts": {
  "start": "react-scripts start"
}

然后才能:

npm run start

npx直接自由恋爱:

npx react-scripts start

3. 版本控制

npm是专一的好男人:

npm install webpack@4.44.1  # 锁定版本

npx是个海王:

npx webpack@4.44.1 build  # 今天用4.44.1
npx webpack@5.0.0 build    # 明天用5.0.0

三、CP相处之道:什么时候该用谁?

适合npm的场景:

  1. 项目长期使用正经依赖(就像结婚)
  2. 项目构建依赖
  3. 团队协作需要统一版本(锁定版本)

适合npx的场景:

  1. 一次性命令/工具(就像约会)
  2. 不想全局安装的CLI工具
  3. 快速测试不同版本的包
  4. 执行远程脚本(网恋奔现)

四、CP冷知识

  1. npx的24小时法则:默认会缓存包24小时,像不像某些人的"分手冷静期"?

  2. 远程执行

    npx https://gist.github.com/username/123456
    

    这相当于"网恋工具人"啊!

  3. npx的查找顺序

    • 先找本地(node_modules/.bin)
    • 再找全局安装的包
    • 最后没找到,则临时下载

五、CP常见问题

Q: 我npm和npx都用混了怎么办? A: 记住口诀:

  • 持久用npm
  • 临时用npx
  • 海王用npx加版本号

Q: 为什么npx有时候很慢? A: 因为它正在偷偷下载包,就像你网恋对象正在P图一样需要时间!

Q: 为什么需要 npx?

  1. 避免全局污染:

    # 不需要全局安装就可以使用
    npx create-react-app my-app
    
  2. 简化一次性命令:

    # 不需要先安装http-server
    npx http-server
    
  3. 测试不同版本:

    npx nodemon@1.19.4
    npx nodemon@2.0.7
    
  4. 减少项目依赖:

    # 不需要将工具包加入项目依赖
    npx prettier --write .
    

六、 主要区别

特性npmnpx
主要用途包管理(安装/卸载/更新)执行包
是否需要安装需要先安装包可直接运行未安装的包
执行环境npm run 会新建一个shell环境npx 直接在当前上下文执行
执行方式通过 package.json 的 scripts直接执行
包存储位置全局或本地 node_modules临时安装(可选)
缓存机制长期存储默认会缓存包24小时,可配置是否缓存,(可通过 --no-install 禁用)

七、版本关系

  • npm 5.2.0+ 自带 npx
  • 旧版 npm 可以单独安装:
    npm install -g npx
    

八、总结

npm 是包管理器,npx 是包执行器,二者互补使用能提高Node.js开发效率。

npm和npx这对CP,一个负责"过日子",一个负责"玩浪漫"。理解它们的区别后,你的Node.js开发效率会像坐火箭一样飙升!

最后送大家一句话:

用npm是婚姻,用npx是恋爱;
婚姻要慎重,恋爱要大胆;
但千万别用npx来管理项目依赖,
否则你的node_modules会比你的前男友还难缠!

(完)

彩蛋:试着在你的终端输入:

npx cowsay "祝大家包运亨通!"

保证有惊喜!