yarn、pnpm、npm script传递参数的方式

本文介绍了Yarn和pnpm在调用命令时如何处理参数的不同方式。使用pnpm时,若参数用于脚本,则需在参数前添加--字符串以区分pnpm参数与脚本参数。

Yarn 和 pnpm(或npm) 调用命令时接收参数的方式不同,
例如,在如下 package.json 配置中:

{  "scripts": {    "command": "modern command"  }}

当需要执行 modern command --option

使用 Yarn 时,需要执行 yarn command --option

使用 pnpm 时,需要执行 pnpm run command -- --option

这是因为 pnpm 对于命令参数的处理与 Yarn 并不相同,但是与 npm 类似:在不加 -- 字符串的时候,传递的是 pnpm 的参数;在使用 -- 字符串的时候,传递的是执行脚本的参数。

在上述例子里参数 --option 传递给了 modern command。如果执行 pnpm run command --option,则参数 --option 将传递给 pnpm。

总结来说:

在使用 pnpm(或npm) 时,如果传递的参数给 pnpm(或npm),不需要加 --;如果传递的参数是给脚本使用,需要增加 -- 字符串

出处:https://modernjs.dev/docs/apis/commands/monorepo/new

### 不同包管理器的主要特点 #### npm 特点 npm 使用一个中央仓库来存储和分发包。当运行 `npm install` 时,会读取 `package.json` 文件以确定项目依赖,构建依赖树并解析每个包的依赖关系,接着下载所需包至 `node_modules` 目录,并生成或更新 `package-lock.json` 文件以锁定依赖版本[^2]。 ```bash npm init # 初始化新项目 npm install # 安装所有依赖 npm install <package> # 安装特定包 npm update # 更新依赖 npm run <script> # 执行自定义脚本 npm publish # 将包发布到npm仓库 ``` npm 拥有大型生态系统,提供最广泛的 JavaScript 包库,且由于其内置于 Node.js 中,因此不需要额外安装。它支持通过 `package.json` 中的 scripts 字段定义和运行自定义脚本以及采用 semver 规范进行语义化版本控制。 #### Yarn 特点 相较于 npmYarn 改进了安装速度与依赖版本管理机制。具体来说,在处理相同任务上,比如安装相同的依赖项集,Yarn 可能更快完成操作。这是因为 Yarn 实现了并发下载多个文件的能力,从而减少了等待时间。另外,Yarn 提供了一个名为 `.yarnclean` 的功能用于清理不必要的模块,这有助于减少项目的整体大小[^3]。 ```bash yarn init # 创建新的Yarn项目 yarn add <package> # 添加指定软件包作为依赖 yarn upgrade # 升级现有依赖 yarn run <command> # 运行预设命令 ``` 除了性能上的优化外,Yarn 还引入了一些独特的概念如工作区(Workspaces),允许在一个单一的工作区内同时管理和共享多个子项目的公共配置和依赖关系。 #### Pnpm 特点 Pnpm 则专注于提高资源利用效率和加快安装过程。不同于其他两种方式将整个 node_modules 文件夹复制给每一个独立的应用程序实例的做法,Pnpm 采用了硬链接技术只保留一份副本,极大地节省磁盘空间的同时也加速了后续重复性的安装流程。此外,Pnpm 对于扁平化的 node_modules 结构有着更好的兼容性和稳定性,降低了因路径过长而导致的各种潜在错误风险[^1]。 ```bash pnpm install # 下载并安装依赖 pnpm add <package> # 新增外部包为当前工程的一部分 pnpm outdated # 查看哪些已安装的包存在可用的新版 pnpm up # 把旧版本升级成最新稳定版 ``` 对于那些追求极致性能表现或是面临严格硬件条件限制下的开发者而言,选择 pnpm 或许能够带来意想不到的好处;而对于大多数普通应用场景,则可以根据团队习惯和个人喜好自由挑选合适的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值