发音:/mɑːneɾpoʊ/ 嘛呢 rue 坡
使用 pnpm + Vite + monorepo + workspace 是目前构建项目的推荐实践,具备高性能、依赖共享、模块解耦等优势
mkdir monorepo && cd monorepo
pnpm init
packages:
- 'packages/*'
shamefully-hoist=true
mkdir packages && cd packages
pnpm create vite vue-app --template vue
{
"name": "@monorepo/vue-app",
"private": true
}
在根目录 package.json 中添加:
{
"scripts": {
"dev:vue": "pnpm -F @monorepo/vue-app dev"
}
}
cd packages pnpm create vite vue-app1 --template vue pnpm create vite vue-app2 --template vue
monorepo/
├── pnpm-workspace.yaml
├── pnpm-lock.yaml
├── package.json
├── .npmrc
├── apps/ # 实际项目工程
└── packages/
└── another-vue-app/ # Vue3 子项目或插件
├── src/
├── package.json
└── vite.config.ts
└── vue-app/ # Vue3 子项目或插件
├── src/
├── package.json
└── vite.config.ts
prettier 是什么? 一个代码格式化工具,可以格式化任何代码,使代码更加美观,更加易于阅读,更加易于维护
i. 安装
pnpm add -D prettier --workspace-root
ii. 根目录下创建 .prettierrc 文件,配置如下:
{
"singleQuote": true,
"jsxSingleQuote": true,
"semi": false,
"useTabs": false,
"tabWidth": 2,
"bracketSpacing": true,
"jsxBracketSameLine": false,
"arrowParens": "always"
}
iii. 在 CI/CD 中自动格式化,根目录下创建.lintstagedrc.json ;配置如下:
pnpm add -D lint-staged --workspace-root
.lintstagedrc.json
{
"**/*.{js,ts,jsx,tsx}": ["prettier --write"]
}
Editorconfig for VS Code 是什么? 一个用于编辑器的配置文件,可以自动格式化代码,使代码更加美观,更加易于阅读,更加易于维护。
这是一个 VS Code 的插件,可以通过扩张商店安装
配置如下:
root = true
[*]
charset=utf-8
end_of_line=lf
insert_final_newline=true
indent_style=space
indent_size=2
max_line_length = 100
[*.{yml,yaml,json}]
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
packages 中创建一些模块使用 umi 快速构建一个用于展示基础组件的项目
i. 初始化
pnpm dlx create-umi@latest
ii. 安装packages下的依赖
pnpm add @monorepo/ui @monorepo/icons @monorepo/pro-components --workspace
i. 使用 vite 创建一个 react 项目
pnpm create vite my-vue-app --template react-ts
ii. 安装packages下的依赖
pnpm add @monorepo/ui @monorepo/icons @monorepo/pro-components --workspace
# 删除所有子包 node_modules
pnpm recursive exec -- rm -rf node_modules
# 删除根目录缓存,这里可选
rm -rf node_modules
rm -rf .pnpm-store
rm -rf **/.vite
# pnpm 配置
hoist=true
shamefully-hoist=true # 将所有依赖提升到根目录
strict-peer-dependencies=false #忽略 peer dependencies 严格检查
enable-pre-post-scripts=true # 允许 postinstall 脚本运行
# 把 vite、.vite 所有依赖全部提升到根,这个默认是否的
public-hoist-pattern[]=*
export default defineConfig({
// 方式一:
// cacheDir: resolve(__dirname, '../../node_modules/.vite'), // 强制指向根
// 方式二:这一步需要3.4
cacheDir: env.VITE_CACHE_DIR || 'node_modules/.vite'
})
# Vite 缓存配置
VITE_CACHE_DIR=../../node_modules/.vite