npm npx nvm cnpm yarn pnpm 的区别
npm
-
安装其他人的轮子,也可以自己上传项目上去供他人使用; 一个开源的社区
npm不用特意安装,安装了node版本 也包含了npm安装 在终端输入 npm -v 查看版本 -
官网的简介: npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。
cnpm
(1) cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。
(2) npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,于是淘宝团队干了这事。来自官网:“这是一个完整 npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
- 查看源
npm config get registry
- 修改为淘宝源
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 重置为官方源
npm config set registry https://registry.npmjs.org/
- 也可以指定特定包的源 我们需要给npm提供config参数–{module_name}_binary_host_mirror可以通过镜像下载二进制文件
例如 :npm install canvas --canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas/
- 当然我们不希望在命令行中添加参数,因为它不便于维护。我们更希望能在配置文件中固化,我们可以在.npmrc(npm的配置文件)中设置一个或多个模块的二进制文件下载镜像地址,一个好的长期维护的.npmrc文件可以让我们的任何项目安装过程更加轻松愉悦。
- 我的.npmrc, 其中dtminds:registry 为公司私仓的包
registry=https://registry.npm.taobao.org/
@dtminds:registry=http://npm.repo.dtminds.cn/repository/npm-dtminds/
//npm.repo.dtminds.cn/repository/npm-dtminds/:_authToken=NpmToken.1b5a5d9d-eb8a-3128-84eb-68cf4b0aafda
canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas/
yarn
yarn 是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,它仍然使用 npm 的registry,不过提供了全新 CLI 来对包进行管理
过去,yarn 的出现极大的抢夺了 npm 的市场,甚至有人戏言,npm 只剩下一个 registry 了。
之所以会出现这种情况,是因为在过去,npm 存在下面的问题:
- 依赖目录嵌套层次深:过去,npm 的依赖是嵌套的,这在 windows 系统上是一个极大的问题,由于众所周知的原因,windows 系统无法支持太深的目录
- 控制台输出繁杂:过去,npm 安装包的时候,每安装一个依赖,就会输出依赖的详细信息,导致一次安装有大量的信息输出到控制台,遇到错误极难查看
- 由于 npm 的版本依赖可以是模糊的,可能会导致工程移植后,依赖的确切版本不一致。
解释扁平化 :
- 从 npm3 开始,包括 yarn,都着手来通过扁平化依赖的方式来解决这个问题。相信大家都有这样的体验,我明明就装个 express,为什么 node_modules里面多了这么多东西?
所有的依赖都被拍平到node_modules目录下,不再有很深层次的嵌套关系。这样在安装新的包时,根据 node require 机制,会不停往上级的node_modules当中去找,如果找到相同版本的包就不会重新安装,解决了大量包重复安装的问题,而且依赖层级也不会太深。
针对上述问题,yarn 从诞生那天就已经解决,并且优化了部分npm内容增加了一些原本没有的命令
yarn 的出现给了npm巨大的压力,
npm6 之后,可以说npm已经和yarn非常接近,甚至没有差距了。很多新的项目,又重新从yarn转回到npm。yarn 官网:https://www.yarnpkg.com/zh-Hans/, 参考资料,想了解更多点击查看
pnpm
其实
npm3,npm6+, 和 yarn 这种包的扁平化的处理方式,它真的就是无懈可击吗?并不是。它照样存在诸多问题pnpm 出现就是解决这些事情
1.依赖结构的不确定性。
2.扁平化算法本身的复杂性很高,耗时较长。
3.项目中仍然可以非法访问没有声明过依赖的包
pnpm依赖策略:消除依赖提升、规范拓扑结构
之前在使用 npm/yarn 的时候,由于 node_module 的扁平结构,如果 A 依赖 B, B 依赖 C,那么 A 当中是可以直接使用 C 的,但问题是 A 当中并没有声明 C 这个依赖。因此会出现这种非法访问的情况。 但 pnpm 自创了一套依赖管理方式,很好地解决了这个问题,保证了安全性。
参考资料,想了解更多点击查看
pnpm:使用
pnpm 软链接和硬链接 推荐
pnpm 软链接和硬链接
pnpm 软链接和硬链接 极力推荐
推荐
官网:https://pnpm.js.org/installation/
进一步了解 点击 参考资料,想了解更多点击查看
nvm
nvm 是node版本的管理工具,可以自由的安装,切换node的各个版本
了解详情参考我的其他笔记
npx
npm从5.25.2版开始,增加了 npx 命令。方便了我在项目中使用全局包。
区别
npx 注重的执行,npm注重的是模块的安装和删除
npx 在执行时会检查是否有这个包,如果没有的话临时下载,执行后删除
npx create-react-app my-react-app上面代码运行时,npx 将create-react-app下载到一个临时目录,使用以后再删除。所以,以后再次执行上面的命令,会重新下载create-react-app。