看到各種開源項目從 yarn 遷移到 pnpm,心血來潮也想來嘗試一下 pnpm 這款被吹爆的包管理工具。
項目之前使用的 yarn,需要將其 lock 文件轉換一下。查閱文檔 pnpm 提供了相應命令,直接使用就完事,nice。
▶ pnpm import
/.../
完事后會生成 'pnpm-lock.yaml' 文件
├── package.json
└── pnpm-lock.yaml
刪除所有 node_modules 文件執行 pnpm install 重新安裝依賴。
啟動項目,然后一大堆報錯,"Can't resolve 'xxx' in 'xxxx''。
研究文檔發現,yarn 和 npm 會將所有依賴平鋪在 node_modules,在項目中可以訪問任何依賴的包。默認配置的 pnpm 創建 node_modules 時不會平鋪依賴,我們需要將依賴提升至node_modules根目錄。
創建 '.npmrc' 文件
shamefully-hoist=true
此配置將所有內容提升到node_modules的根目錄,如果明確知道需要提升的包名,可以按如下設置
public-hoist-pattern[]=moment
public-hoist-pattern[]=@umijs/*
public-hoist-pattern[]=antd
public-hoist-pattern[]=umi-request