npm与npx

本文详细介绍了npx作为npmv5.2.0引入的新命令,如何简化了使用npm注册表中软件包的过程,尤其在执行CLI工具时的便捷性。通过npx,开发者可以临时安装并立即使用依赖包中的命令行工具,而无需全局安装,避免了长期的环境污染。此外,npx还支持执行远程仓库的可执行文件,进一步提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

npm与npx

npx

npx是一个工具,npm v5.2.0引入的一条命令(npx),一个npm包执行器,旨在提高从npm注册表使用软件包的体验 ,npm使得它非常容易地安装和管理托管在注册表上的依赖项,npx使得使用CLI工具和其他托管在注册表。它大大简化了一些事情。

就像npm极大地提升了我们安装和管理包依赖的体验,在npm的基础之上,npx让npm包中的命令行工具和其他可执行文件在使用上变得更加简单。它极大地简化了我们之前使用纯粹的npm时所需要的大量步骤。

举例

使用create-react-app创建一个react项目。

npm:

npm install -g create-react-app
create-react-app my-app

npx:

npx create-react-app my-app

这条命令会临时安装 create-react-app 包,命令完成后create-react-app 会删掉,不会出现在 global 中。下次再执行,还是会重新临时安装。

npx 会帮你执行依赖包里的二进制文件。

举例来说,之前我们可能会写这样的命令:

npm i -D webpack
./node_modules/.bin/webpack -v

如果你对 bash 比较熟,可能会写成这样:

npm i -D webpack 
npm bin/webpack -v

有了 npx,你只需要这样:

npm i -D webpack
npx webpack -v

也就是说 npx 会自动查找当前依赖包中的可执行文件,如果找不到,就会去 PATH 里找。如果依然找不到,就会帮你安装!

npx 甚至支持运行远程仓库的可执行文件:

npx github:piuccio/cowsay hello

再比如 npx http-server 可以一句话帮你开启一个静态服务器!(第一次运行会稍微慢一些)

npx http-server

指定node版本来运行npm scripts:

npx -p node@8 npm run build

主要特点:
1、临时安装可执行依赖包,不用全局安装,不用担心长期的污染。
2、可以执行依赖包中的命令,安装完成自动运行。
3、自动加载node_modules中依赖包,不用指定$PATH。
4、可以指定node版本、命令的版本,解决了不同项目使用不同版本的命令的问题。

来自 http://itxw.net/article/7.html

一些简写:
npm install=npm i

在git clone项目的时候,项目文件中并没有 node_modules文件夹,项目的依赖文件可能很大。直接执行,npm会根据package.json配置文件中的依赖配置下载安装。

-global=-g,全局安装,安装后的包位于系统预设目录下

–save=-S,安装的包将写入package.json里面的dependencies,dependencies:生产环境需要依赖的库

–save-dev=-D,安装的包将写入packege.json里面的devDependencies,devdependencies:只有开发环境下需要依赖的库

05-20
### NPMNPX的关系及区别 #### 基本概念 NPM(Node Package Manager)是一个用于管理和分发JavaScript库和应用程序的工具。它是Node.js的一部分,在安装Node.js时自动附带[^4]。NPM允许开发者在全球范围内或项目本地安装依赖项。 NPX(Node Package Execute)是一种CLI工具,旨在简化运行临时脚本的过程。自npm 5.2.0起,NPX已作为内置功能集成到NPM中[^1]。其主要目标是让用户能够快速执行某些命令,而无需显式地将相关包安装到`node_modules`目录中。 --- #### 使用场景对比 - **NPM的主要用途** - 安装、卸载以及管理项目的依赖关系。 - 提供了一个存储库来查找第三方模块。 - 支持构建自动化流程所需的脚手架工具。 示例代码展示如何利用npm进行操作: ```bash npm init # 初始化一个新的package.json文件 npm install express --save # 将express框架添加至当前工程并记录于dependencies字段下 ``` - **NPX的功能扩展** - 运行一次性任务或者测试某个新发布的库是否满足需求前先体验一番效果再决定要不要正式引入进来成为长期使用的组件之一。 - 对那些仅需偶尔调用几次而非频繁使用的程序来说特别有用,比如创建React应用实例:`npx create-react-app myapp`. 下面给出一段简单的例子说明怎样借助npx完成工作而不必事先把对应的软件加入环境变量路径里去: ```bash npx eslint yourfile.js # 不需要提前全局安装eslint即可对其它人的代码做静态分析检测潜在错误隐患 ``` --- #### 技术实现层面的不同点 | 特性 | NPM | NPX | |--------------------|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | 主要作用 | 长期维护项目结构,处理各种复杂的相互关联情况 | 即刻响应简单请求 | | 是否保留副本 | 是 | 否 (除非明确指定保存选项) | | 执行效率 | 较低 | 更高效 | 具体而言: - 当通过 `npm run-script <command>` 来触发定义好的生命周期钩子函数的时候,实际上背后还是依靠shell解析器去找寻对应的实际可执行档位位置然后再加载起来运作;相比之下,直接采用 `npx some-command-name` 形式的语法则显得更为简洁明快[^4]。 另外值得注意的一件事就是关于版本控制方面也有差异存在——假如说同一个机器上面同时存在着不同版本号之间的冲突矛盾现象的话,那么单纯依靠传统的办法很难彻底解决这个问题,这时候就可以考虑运用pnpm之类的替代方案了[^3]。 --- ### 总结陈词 综上所述可以看出虽然两者之间确实存在一定联系但也各自具备独特的优势所在因此在实际开发过程中应当根据具体情况灵活选用合适的手段才能达到事半功倍的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值