nvm、node、npm 、yarn区别

  1. nvm:nodejs 版本管理工具,也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本。
  2. nodejs:在项目开发时的所需要的代码库。
  3. npm:nodejs 包管理工具,在安装的 nodejs 的时候,npm 也会跟着一起安装,它是包管理工具,npm 管理 nodejs 中的第三方插件。
  4. 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

缺点:

  1. 依赖包重复的安装
  2. (幽灵依赖 Phantom dependencies)package.json 中未定义的依赖,但项目中依然可以正确地被引用到。
  3. (不确定性 Non-Determinism)同样的 package.json 文件,install 依赖后可能不会得到同样的 node_modules 目录结构。
  4. 如果有 package.json 变更,本地需要删除 node_modules 重新 install,否则可能会导致生产环境与开发环境 node_modules 结构不同,代码无法正常运行。
  5. 依赖分身 Doppelgangers。比如模块 C 和 E 都依赖 B@2.0,但其实引用的不是同一个 B,假设 B 在导出之前做了一些缓存或者副作用,那么使用者的项目就会因此而出错。

yarn

解决npm的缺点:

  1. lockfile 解决不确定性。lockfile 里记录了依赖,以及依赖的子依赖,依赖的版本,获取地址与验证模块完整性的 hash。

缺点:

  1. 扁平化的 node_modules 结构(子依赖会尽量平铺安装在主依赖项所在的目录中)
    node_modules
    ├── A@1.0.0
    ├── B@1.0.0
    └── C@1.0.0
    └── node_modules
    └── B@2.0.0
  2. 没有解决幽灵依赖和依赖分身问题。

pnpm(performant npm)

优点:
幽灵依赖问题:只有直接依赖会平铺在 node_modules 下,子依赖不会被提升,不会产生幽灵依赖。
依赖分身问题:相同的依赖只会在全局 store 中安装一次。项目中的都是源文件的副本,几乎不占用任何空间,没有了依赖分身。