Lerna脚手架搭建(六):框架代码拆包

本文最后更新于:2024年12月10日 下午

一、拆分原则 👈

根据模块的功能拆分:

  • 核心模块:core
  • 命令模块:commands
    • 初始化
    • 发布
    • 清除缓存
  • 模型模块:models
    • Command 命令
    • Project 项目
    • Component 组件
    • Npm 模块
    • Git 仓库
  • 工具模块:utils
    • Git 操作
    • 云构建
    • 工具方法
    • API 请求
    • Git API

二、core 👈

1.命令执行流程

2.涉及技术点

2.1核心库

  • import-local

  • commander

2.2工具库

  • npmlog:打印日志

  • fs-extra:文件操作

  • semver:版本匹配

  • colors:终端打印文本颜色

  • user-home:获取用户主目录

  • dotenv:获取环境变量

  • root-check:root账户检查

三、拆包步骤 👈

  1. 在原有 xuven-cli-dev 项目根目录创建 corecommandsmodelsutils 文件夹;

  2. 编辑根目录 lerna.json 文件如下:

1
2
3
4
5
6
7
8
9
{
"packages": [
"core/*",
"commands/*",
"models/*",
"utils/*"
],
"version": "1.0.4"
}
  1. 将根目录 packages 文件夹里的 coreutils 文件夹分别移动到根目录的 coreutils 下;

  2. 删除根目录 packages 文件夹;

  3. 修改 core/core/package.json 中的 dependencies 配置如下:

1
2
3
4
5
...
"dependencies": {
"@xuven-cli-dev/utils": "file:../../utils/utils"
},
...
  1. 删除 core/core 下的 node_modules 文件夹,重新执行 npm link

  2. 修改 core/core 文件名为 core/cli;

  3. core/cli 下执行 cnpm i -S import-local 安装 import-local;

  4. core/cli 下执行 cnpm i -S npmlog 安装 npmlog;

  5. 修改 core/cli/bin/index.js 如下:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env node

const importLocal = require('import-local');

if (importLocal(__filename)) {
require('npmlog').info('cli', '正在使用 xuven-cli 本地版本');
} else {
require('../lib')(process.argv.slice(2));
}
  1. 重命名 core/cli/lib/code.jscore/cli/lib/index.js

  2. 修改 core/cli/lib/index.js 如下:

1
2
3
4
5
6
7
'use strict';

module.exports = core;

function core() {
console.log('exec core');
}
  1. 执行 xuven-cli-dev 命令提示找不到目录,解决办法:执行 npm link;

  2. 重新执行命令,输出 exec core

  3. 回到 xuven-cli-dev 目录,执行 cnpm i -D @xuven-cli-dev/core;

  4. 再次执行 xuven-cli-dev 输出:

1
2
hello xuven-cli
info cli 正在使用 xuven-cli 本地版本
  1. 最后,删除 xuven-cli-dev 目录下的 node_modules 文件夹,删除同目录下 package.json 的依赖项 @xuven-cli-dev/core,重新执行 cnpm i


Lerna脚手架搭建(六):框架代码拆包
https://blog.xuven.xyz/post/FrameworkCodeUnpacking/
作者
Xuven Li
发布于
2022年4月1日
许可协议