一、pnpm 是什么
pnpm和npm、yarn类似,都可以作为npm包的管理工具,pnpm的优点是速度快、占用磁盘空间小,好的开源项目使用pnpm作为monorepo包管理工具,如:vue3,Vite、Element-Plus等。
二、pnpm包的安装使用
1、使用npm全局安装
npm install pnpm -g
2、创建目录使用pnpm 初始化
mkdir play
cd play
pnpm init
3、在根目录创建pnpm-workspace.yaml 设置包工作空间
package:
- pageages/*
- docs
表示 packages/* 这个目录下面所有的文件为 workspace 的内容。
4、创建 packages/core目录,并进入,使用pnpm初始化,修package的名称未 ‘@xie/core’
mkdir pagages/core
cd pageages/core
pnpm init
5、创建 packages/shared,并进入,使用pnpm初始化,修package的名称未 ‘@xie/share’
mkdir pagages/shared
cd pageages/shared
pnpm init
6、把包shared和core安装到工作区中,使子包可以相互使用
pnpm install @xie/shared -wD
pnpm install @xie/cord -wD
- -w 标识把包添加到根目录
- -D 标识把包添加到Devdepends 根目录的package.json 多了下面依赖
"@xies/core": "workspace:^",
"@xie/shared": "workspace:^"
三、子包相互引用
在packages/shared 新建is/index.ts
export const isClient = typeof window !== 'undefined'; // 是否是客户端
export const isDef = <T = any>(val?: T): val is T => typeof val !== 'undefined'; // 使用定义
export const assert = (condition: boolean, ...infos: any[]) => {
if (!condition) console.warn(...infos);
};
const toString = Object.prototype.toString;
export const isBoolean = (val: any): val is boolean => typeof val === 'boolean';
export const isFunction = <T extends () => void>(val: any): val is T => typeof val === 'function';
export const isNumber = (val: any): val is number => typeof val === 'number';
export const isString = (val: unknown): val is string => typeof val === 'string';
export const isObject = (val: any): val is object => toString.call(val) === '[object Object]';
export const isWindow = (val: any): val is Window => typeof window !== 'undefined' && toString.call(val) === '[object Window]';
export const now = () => Date.now();
export const timestamp = () => +Date.now();
export const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n));
export const rand = (min: number, max: number) => {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
};
export const isIOS = /* #__PURE__ */ isClient && window?.navigator?.userAgent && /iP(ad|hone|od)/.test(window.navigator.userAgent);
export const hasOwn = <T extends object, K extends keyof T>(val: T, key: K): key is K => Object.prototype.hasOwnProperty.call(val, key);
在packages/shared/index.ts 中导出
export * from './is'
在packages/core 新建 getDevice/index.ts
import { isString } from '@xie/shared';
export const returlString =(val?:string)=> {
if(!isString(val)){
return ''+val
}
return val
}
就可以在packages/core包中使用packages/shard包中的变量