前端工具:nvm、node、npm 、yarn区别
nvm、node、npm 、yarn区别
- nvm:nodejs 版本管理工具,也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本。
- nodejs:在项目开发时的所需要的代码库。
- npm:nodejs 包管理工具,在安装的 nodejs 的时候,npm 也会跟着一起安装,它是包管理工具,npm 管理 nodejs 中的第三方插件。
- yarn与npm一样,都是js包管理器,都适用于nodejs。不一样的是,yarn与npm的架构和包管理方式方式不同
npm,cnpm区别
- cnpm: npm client for China mirror of npm
nvm、node、npm 关系
nvm 管理 nodejs 和 npm 的版本,npm 可以管理 nodejs 的第三方插件。
webpack
现代 javascript 应用程序的 静态模块打包器 (module bundler)
作用:
把很多文件打包整合到一起, 缩小项目体积, 提高加载速度
其中功能:
- less/sass -> css
- ES6/7/8 -> ES5
- html/css/js -> 压缩合并
vite
它是一个更加轻量(热更新速度快,打包构建速度快)的vue项目脚手架工具。
相对于vue-cli(基于webpack)它默认安装的插件非常少,随着开发过程依赖增多,需要自己额外配置
https://github.com/vitejs/vite
npm & yarn & pnpm 包管理机制
https://zhuanlan.zhihu.com/p/526257537
npm
缺点:
- 依赖包重复的安装
- (幽灵依赖 Phantom dependencies)package.json 中未定义的依赖,但项目中依然可以正确地被引用到。
- (不确定性 Non-Determinism)同样的 package.json 文件,install 依赖后可能不会得到同样的 node_modules 目录结构。
- 如果有 package.json 变更,本地需要删除 node_modules 重新 install,否则可能会导致生产环境与开发环境 node_modules 结构不同,代码无法正常运行。
- 依赖分身 Doppelgangers。比如模块 C 和 E 都依赖 B@2.0,但其实引用的不是同一个 B,假设 B 在导出之前做了一些缓存或者副作用,那么使用者的项目就会因此而出错。
yarn
解决npm的缺点:
- lockfile 解决不确定性。lockfile 里记录了依赖,以及依赖的子依赖,依赖的版本,获取地址与验证模块完整性的 hash。
缺点:
- 扁平化的 node_modules 结构(子依赖会尽量平铺安装在主依赖项所在的目录中)
node_modules
├── A@1.0.0
├── B@1.0.0
└── C@1.0.0
└── node_modules
└── B@2.0.0 - 没有解决幽灵依赖和依赖分身问题。
pnpm(performant npm)
优点:
幽灵依赖问题:只有直接依赖会平铺在 node_modules 下,子依赖不会被提升,不会产生幽灵依赖。
依赖分身问题:相同的依赖只会在全局 store 中安装一次。项目中的都是源文件的副本,几乎不占用任何空间,没有了依赖分身。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 desperado!
