cnpm​ 创建和管理 ​monorepo​ 的完整步骤(比 npm/yarn 更适合国内网络环境)

以下是使用 ​cnpm​ 创建和管理 ​monorepo​ 的完整步骤(比 npm/yarn 更适合国内网络环境):


1. 安装 cnpm

npm install -g cnpm --registry=https://registry.npmmirror.com

2. 初始化 monorepo 项目

mkdir my-monorepo && cd my-monorepo
cnpm init -y

3. 配置 monorepo 工作区

3.1 创建目录结构
mkdir -p packages/{core,utils} apps/{web,desktop}
3.2 配置工作区(替代 pnpm-workspace.yaml)​

在根目录 package.json 中添加:

{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/*"
  ]
}

4. 安装共享依赖

4.1 根目录安装全局工具
cnpm install -D typescript eslint prettier --workspace-root
4.2 为子包安装独立依赖
# 为 core 包安装 lodash
cd packages/core
cnpm install lodash
cd ../../

# 为 web 应用安装 react
cd apps/web
cnpm install react react-dom

5. 链接本地包

5.1 在子包中引用其他包

修改 apps/web/package.json

{
  "dependencies": {
    "@my/core": "file:../../packages/core"
  }
}
5.2 重新链接依赖
# 在根目录执行
cnpm install

6. 添加脚本命令

在根目录 package.json 中:

{
  "scripts": {
    "dev": "cnpm run dev -w apps/web",
    "build": "cnpm run build -w packages/core",
    "lint": "eslint ."
  }
}

7. 启动项目

# 启动 web 应用开发模式
cnpm run dev

关键优势(vs npm/yarn)​

特性cnpmnpm/yarn
安装速度⚡ 快 3-5 倍(国内镜像)🐢 慢
依赖管理自动使用 npmmirror 镜像需手动配置 registry
monorepo 支持通过 workspaces 支持需要 lerna 等工具
磁盘占用硬链接节省空间重复安装占用更多空间

常见问题解决

1. 镜像失效
# 重置镜像源
cnpm config set registry https://registry.npmmirror.com
2. 依赖冲突
# 删除重装
rm -rf node_modules
cnpm install
3. 子包热更新

apps/web/vite.config.ts 中:

export default {
  resolve: {
    alias: {
      "@my/core": path.resolve(__dirname, "../../packages/core/src")
    }
  }
}

完整项目结构

my-monorepo/
├── package.json
├── packages/
│   ├── core/       # 共享核心库
│   └── utils/      # 工具函数
└── apps/
    ├── web/        # 前端应用
    └── desktop/    # 桌面应用

通过 cnpm 的 ​镜像加速​ 和 ​workspace 原生支持,能显著提升国内开发者的 monorepo 体验。如需更高级功能(如版本管理),可搭配 lerna 使用。

在 ​monorepo​ 项目中使用 ​cnpm​ 安装 piniaaxiosvue-router 的完整指南(适合国内网络环境):


1. 安装到所有子项目(全局共享)​

# 在 monorepo 根目录执行(所有子包共享依赖)
cnpm install pinia axios vue-router -W
  • -W 参数表示安装到根目录的 node_modules(所有子包共享)

2. 安装到特定子项目

场景1:前端应用(如 apps/web)​
# 进入前端项目目录
cd apps/web

# 安装仅当前项目使用的依赖
cnpm install pinia axios vue-router
场景2:多个子项目共享依赖
  1. 在根目录的 package.json 中声明:
{
  "dependencies": {
    "pinia": "^2.1.7",
    "axios": "^1.6.8",
    "vue-router": "^4.2.5"
  }
}
  1. 执行安装:
cnpm install

3. 配置镜像加速(国内必做)​

在项目根目录创建 .npmrc 文件:

registry=https://registry.npmmirror.com
electron_mirror=https://npmmirror.com/mirrors/electron/

或使用环境变量:

export REGISTRY=https://registry.npmmirror.com

4. 在代码中使用

在 Vue 项目中初始化
// apps/web/src/main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import axios from 'axios'
import router from './router'

const app = createApp(App)
app.use(createPinia())
app.use(router)

// 全局挂载 axios
app.config.globalProperties.$axios = axios
在子包中跨项目引用
// packages/utils/src/request.js
import axios from 'axios'

export const fetchData = () => axios.get('/api/data')

5. 版本管理技巧

锁定版本(避免冲突)​

在根目录 package.json 中:

{
  "resolutions": {
    "axios": "1.6.8",
    "vue-router": "4.2.5"
  }
}

然后运行:

cnpm install
更新特定包
# 更新所有子项目的 axios
cnpm update axios -r

6. 完整 monorepo 结构示例

my-monorepo/
├── package.json         # 根依赖(pinia, axios, vue-router)
├── packages/
│   └── utils/           # 共享工具库
└── apps/
    └── web/             # 前端应用
        ├── src/
        │   ├── stores/  # pinia 状态管理
        │   └── router/  # vue-router 配置
        └── package.json # 可覆盖根依赖版本

常见问题解决

1. 安装速度慢
# 使用 cnpm 的缓存加速
cnpm install --prefer-offline
2. 依赖冲突
# 查看冲突
cnpm ls axios

# 强制重新安装
cnpm install axios@1.6.8 --force
3. 热更新失效

vite.config.js 中配置:

export default {
  server: {
    watch: {
      // 监控子包变化
      ignored: ['!**/packages/**']
    }
  }
}

为什么用 cnpm?​

优势说明
国内镜像加速从 npmmirror.com 拉取,速度提升 5-10 倍
磁盘空间优化硬链接技术减少重复依赖占用
monorepo 友好原生支持 workspace 配置
版本一致性自动处理 peerDependencies

按照以上步骤操作后,你的 monorepo 项目将拥有:

  • ✅ 全项目共享的 pinia 状态管理
  • ✅ 统一的 axios 请求库
  • ✅ 跨子项目的 vue-router 路由管理
  • ⚡ 飞快的国内下载速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值