外观
外观
怡然
1427字约5分钟
npm
2024-08-20
npm
npm
是Node.js
官方的包管理工具,它在你安装node
的时候一并安装。
npm
常用指令npm init
: 初始化一个 npm
项目,引导创建package.json
npm install
: 根据项目中 package.json
安装相关依赖npm install [packageName]
: 安装指定的包npm uninstall [packageName]
: 卸载指定包npm update [packageName]
: 更新指定包npm publish
: 发布当前包npm search [packageName]
: 查询包npm view [packageName]
: 查询包的详细信息,版本、依赖、描述等npm outdated
: 查看当前有新版本的包npm ls
: 查看当前项目所有依赖树npm run [script_name]
: 运行 package.json
中 script
定义的脚本npm link
: 将当前包链接到全局的 npm
环境中cnpm
为了解决
npm
下载速度过慢的问题,阿里巴巴的淘宝团队提供的一个npm
镜像。以提高下载速度和稳定性。
npx
npx
是npm5.2
版本引入的工具,用于执行npm
包命令,相比npm
,npx
会自动安装依赖包并执行某个命令,无需预先全局或本地安装某个命令行工具。
yarn
通过并行下载和本地缓存来提高性能,可以更快地安装项目的依赖项。默认生成一个
yarn.lock
文件来锁定版本(类似于npm
的package-lock.json
),确保在不同环境中安装的依赖项版本一致,并且通过验证依赖项的来源和内容来提高安全性,检查每个依赖项的哈希值,并提供签名验证功能。
指令大多与
npm
类似,简述两个不一致的指令:
yarn add [packageName]
: 安装指定的包并添加到 dependencies
中yarn remove [packageName]
: 删除指定的包,并更新 package.json
和 yarn.lock
pnpm
npm
与 yarn
、 pnpm
的区别npm
所有的包是附带各自的node_modules
的嵌套结构。比如我现在依赖中需要 package1
和 package2
,但是这两个包都依赖 package3
的包,但是这时候的 package3
会存在需要依赖它的包中,这样会导致 package3
的冗余,node_modules
的体积特别大,而且如果包一个依赖一个会造成文件路径特别深,并且 windows
有最大路径长度限制,所以在对于一些依赖层级比较深的包就会产生问题。这时候 yarn
就针对该问题做了处理。yarn
采用扁平化来解决(npm@3+
也采用扁平化解决)。将 package3
包进行提升,但是依赖包有多个版本的时候只会提升一个,其余的版本依旧会存在多个。但这种扁平化包管理的方式经常会造成幽灵依赖问题。 yarn
有时会出现安装了一些不需要的或者不正确的依赖包的情况。这些依赖包在项目中没有被显式地引用或使用,但仍然存在于 node_modules
目录中,占用了项目的存储空间。pnpm
采用了软连接和硬链接的方式解决以上存在的问题,软硬连接是操作系统提供的机制。 inode
,即它们有相同的 inode
号(储存文件元信息的区域)和相同的 device
号。因此,对于硬链接和原文件来说,它们的访问权限、所有者、大小等属性都是相同的。(可以理解为对原文件起了一个别名,本质是同一个文件)inode
,它们有不同的 inode
号和 device
号。因此,对于软链接和原文件来说,它们的访问权限、所有者、大小等属性可能不同。(它包含了到原文件的路径信息,本质不是同一个文件)pnpm
将所有的依赖放在全局的 store
中,然后硬连接到node_modules/.pnpm
下。pnpm
也提高了安装速度: node_modules
目录结构是根据依赖关系计算的。node_modules
。相关信息
本篇文章主要参考了以下文章:https://juejin.cn/post/7380771735682236435
作者:outsider_友人A