Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

monorepo模块拆分 #41

Open
i5ting opened this issue Oct 14, 2022 · 10 comments
Open

monorepo模块拆分 #41

i5ting opened this issue Oct 14, 2022 · 10 comments

Comments

@i5ting
Copy link
Owner

i5ting commented Oct 14, 2022

@justjavac 给出的。

  • @ts-junit/core 核心
  • @ts-junit/cli 命令行
  • @ts-junit/compiler 编译器(待定)
  • @ts-junit/decrator
  • @ts-junit/uvu-strategy
  • @ts-junit/schema(待定)

把目前 core 的代码移动到 @ts-junit/uvu
如果有新的 @ts-junit/jest 那么只需要依赖 @ts-junit/core

备忘一下

@i5ting
Copy link
Owner Author

i5ting commented Oct 14, 2022

cli mode

  /**
   * Usually, run single test for cli mode
   * 
   * 1. require compiled test (in output/*.js)
   * 2. require ts-junit dist/decorator.js
   * 3. parse data from dist/decorator.js cache
   * 4. final, run tests
   */

api mode

  /**
   * Usually, run single typescript test for api mode
   * 
   * 1. import ts test file (in exmaple/*.js)
   * 2. require ts-junit dist/decorator.js
   * 3. parse data from dist/decorator.js cache
   * 4. final, run tests
   */

对比

example/*.ts 会编译到 ts-junit的output目录(暂定,后面也可能会放到用户目录下,谨防文件写入权限问题)。不然在原来的文件就有记录,不好。

其实就是执行的是tsfile(import),还是jsfile(require)。中间的过程都是一样的。并无本质区别

@justjavac
Copy link
Collaborator

不太对。

decorator 只搜集待测试的数据,提供的是原始数据,分析数据应该在其他模块。比如 cli 运行的时候,分析数据和运行测试应该都是 uvu 模块负责。

api 模式中,如果是介入到 jest 框架,那么分析数据的任务是有 jest 模块的相关代码完成。

@i5ting
Copy link
Owner Author

i5ting commented Oct 14, 2022

应该

策略模式的写法如下

import * as path from "node:path";
import { run } from "ts-junit";
import SomeStrategy from "./SomeStrategy";

const folder = path.resolve(process.cwd(), "./tests");
const file = path.resolve(process.cwd(), "./tests/test.ts");

// run([folder, file]);
// or custom Strategy

run([folder, file], new SomeStrategy());

自己实现一个JestStrategy就好了。这里只是处理映射装饰器和jest映射关系。

@zhengxs2018
Copy link
Contributor

@ts-junit/decrator
装饰器我已经在拆,不过名字刚看到,我写的是 @ts-junit/decorators 。。。

#42

@i5ting
Copy link
Owner Author

i5ting commented Oct 15, 2022

设计

  • cli:命令行实现
  • core:提供核心工,比如直接应用就可以使用ts-node运行。
  • decorator:装饰器实现,当然,如果有schema处理更好
  • strategy : 策略接口,以及默认uvu策略。
  • utils:工具函数

@i5ting
Copy link
Owner Author

i5ting commented Oct 15, 2022

pnpm学习:https://tehub.com/a/8xqdR2fNKE

@i5ting
Copy link
Owner Author

i5ting commented Oct 15, 2022

@zhengxs2018
Copy link
Contributor

如果在 monorepo 下,使用 typescript 自带的 tsc 很容易出现因前置依赖未编译而导致的中断,这时就需要使用 project-references + ts --build 进行手动依赖关联和自动地构建依赖项。

文档链接:https://www.typescriptlang.org/docs/handbook/project-references.html#build-mode-for-typescript

@i5ting
Copy link
Owner Author

i5ting commented Oct 18, 2022

如果在 monorepo 下,使用 typescript 自带的 tsc 很容易出现因前置依赖未编译而导致的中断,这时就需要使用 project-references + ts --build 进行手动依赖关联和自动地构建依赖项。

文档链接:https://www.typescriptlang.org/docs/handbook/project-references.html#build-mode-for-typescript

目前构建顺序

$ pnpm --filter  @ts-junit/utils build
$ pnpm --filter  @ts-junit/decorator build
$ pnpm --filter  @ts-junit/strategy build
$ pnpm --filter  @ts-junit/core build
$ pnpm --filter  @ts-junit/cli build

core里依赖了

  • utils
  • decorator
  • strategy

cli里依赖了

  • core

帮忙基于最新的代码来一个pr

{
    "compilerOptions": {
        // The usual
    },
    "references": [
        { "path": "../src" }
    ]
}

我现在还不确定,这种方式和pnpm workspace是否有冲突。

@zhengxs2018
Copy link
Contributor

zhengxs2018 commented Oct 18, 2022

帮忙基于最新的代码来一个pr

好的我下班后试试

我现在还不确定,这种方式和pnpm workspace是否有冲突。

project-references 不会和 pnpm workspace 起冲突,tsc --build 是由 references#path 配置定的,它甚至可以支持普通目录的构建。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants