使用pnpm创建工作空间,使多项目互相依赖公共内容,减少磁盘占用和反复开发引用组件成本(本地开发)。
pnpm是什么#
pnpm和npm、yarn都是包依赖管理,使用起来没多大差异。这里用它主要还是工作空间吸引了我。想想项目动则按GB来安装依赖包,项目多起来简直就是磁盘灾难(多几个G放小姐姐不香嘛)。
利用工作空间还可以减少项目共用组件的依赖,又节省了点开销,还可以在不同的项目中共用,简直不要太爽。
说依赖过多,下载会很慢。未来也许很慢吧,至少pnpm目前速度还是很快的。
pnpm安装#
看官方介绍:https://pnpm.io/zh/installation
配置工作空间#
先新建一个文件夹当作项目文件夹(使用英文名称)。
注意:该根目录下不应存在可运行项目,可运行项目请在packages目录下创建
在根目录新建packages(项目目录)、components(组件目录)和 pnpm-workspace.yaml 文件
打开文件pnpm-workspace.yaml写入下面代码 官网详细介绍
packages: # all packages in direct subdirs of packages/ - 'packages/*' # all packages in subdirs of components/ - 'components/**' # 根据需要可以添加自己的目录到根目录上进行依赖管理 # - 'api/**' # - 'utils/**' # 不包含目录 - '!**/test/**'
关联工作空间#
关联工作空间主要是利用package.json进行的配置和关联,如果目标目录已经存在该文件请查阅3、5即可。其他参数请看官方介绍
在命令行中分别进入该文件夹根目录、components目录和packages目录,使用
pnpm init命令自动创建package.json文件package.json文件可以用vue-cil、umi-cil等工具进行项目初始化得到。可根据项目开发框架进行选择。尤其是packages下面的项目目录。
在components目录下新建index.js。index.js文件将个组件
import使用(如果项目需要单独使用某个组件,组件文件夹也可以存在package.json进行name和main的定义)。注意:如果是别的入口文件(main.js),请将package.json文件中的
main参数的值index.js修改为main.js为了避免包冲突,修改package.json文件的
name为唯一名字(例如:@yourname/components)在packages目录下面新建目录用
pnpm init或其他框架cil初始化新项目(例:项目文件夹叫demo)进入/packages/demo目录,可以在命令行中使用
pnpm add @yourname/components添加组件工作空间的名字,或者打开package.json文件在dependencies中添加"@yourname/components": "workspace:*"使其包互相关联。使用命令添加的会自带版本号。
至此工作空间的创建和关联包配置完毕。在命令行中退回到根目录使用pnpm i可以安装组件和项目的所有依赖,node_modules会存在很多目录中,但大多是快捷方式,大大减少磁盘占用率。
js文件中使用包#
在js文件中导入包名即可
import "@iqszlong/components";
项目注意事项#
整个项目已经使用pnpm进行包管理了,就不要在packages里面的项目中用其他npm、yarn等进行包管理。dev开发和build目前倒是没有发现问题(webpack、vite、umi、quasar等都可以)