1 一句代码统一项目包管理器
这一句代码在Vite和Vue3源码的根目录
的package.json
里,一定要到根目录去,不要学我,跑到packages的项目里面去找了半天。
Vite中的代码是这样的:
scripts:{
"preinstall": "npx only-allow pnpm",
}
Vue3 中的代码是这样的:
scripts :{
"preinstall": "node ./scripts/preinstall.js",
}
看着不一样,事实上这里两句代码的目的都是一样的,就是限制开发的时候,必须使用pnpm这个包管理。vue3
和vite
都是采用monorepo风格管理代码的项目,使用pnpm更适合它们项目的情况。
2 是否有必要管?
包管理器其实有很多,npm
,yarn
, cnpm
,还有刚才提到的 pnpm
。大家都是将包下载到node_modules
,但是却会产生不一样的文件和文件结构,比如 npm 会产生 package-lock.json
而 yarn 则会产生 yarn.lock
,如果团队中的同事因为开发习惯的不同,由于执行 install的时间不同,可能会导致不同人使用的依赖版本完全不一样。
不同的包管理器对依赖的处理算法也不一样,比如npm
和pnpm
,它们在处理依赖时会得出完全不一样的node_moudles
结构。
这显然会让团队的代码管理变得困难,同时如果像**lock
这样的文件也纳入代码管理的话,也有可能让代码中多出很多由其它包管器产生的对部分人有用
文件。
3 preinstall
我觉得首先要搞清楚这个东西是什么,它是npm提供的一系列生命周期钩子,以使得用户可以在一定时期,执行一些其它指令。我找到了npm
, yarn
,以及pnpm
中介绍这些钩子的文