jiek 1.1.12 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +53 -106
- package/bin/jiek-build.js +16 -0
- package/dist/cli-only-build.cjs +716 -0
- package/dist/cli-only-build.d.cts +91 -0
- package/dist/cli-only-build.d.ts +91 -0
- package/dist/cli-only-build.js +708 -0
- package/dist/cli.cjs +219 -565
- package/dist/cli.d.cts +0 -65
- package/dist/cli.d.ts +0 -65
- package/dist/cli.js +219 -565
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/rollup/index.cjs +102 -49
- package/dist/rollup/index.js +102 -47
- package/package.json +28 -11
- package/src/cli-only-build.ts +7 -0
- package/src/cli.ts +1 -7
- package/src/commands/base.ts +13 -3
- package/src/commands/build.ts +200 -39
- package/src/commands/descriptions.ts +12 -0
- package/src/commands/meta.ts +5 -0
- package/src/rollup/base.ts +44 -0
- package/src/rollup/index.ts +127 -39
- package/src/utils/filterSupport.ts +2 -6
- package/src/rollup/plugins/globals.ts +0 -34
package/README.md
CHANGED
@@ -1,131 +1,78 @@
|
|
1
1
|
# Jiek
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
-
|
13
|
-
-
|
14
|
-
|
15
|
-
-
|
16
|
-
-
|
17
|
-
|
18
|
-
-
|
19
|
-
-
|
20
|
-
|
21
|
-
-
|
22
|
-
-
|
23
|
-
-
|
24
|
-
|
25
|
-
|
3
|
+
| zh-Hans
|
4
|
+
| [en](https://github.com/NWYLZW/jiek/blob/master/packages/jiek/.about/en/README.md)
|
5
|
+
|
6
|
+
[![npm version](https://img.shields.io/npm/v/jiek)](https://npmjs.com/package/jiek)
|
7
|
+
[![npm downloads](https://img.shields.io/npm/dm/jiek)](https://npm.chart.dev/jiek)
|
8
|
+
|
9
|
+
> 基于 `package.json` 元数据并适用于 `Monorepo` 的**轻便**工具库编译管理套件。
|
10
|
+
|
11
|
+
- [x] 自动推断:基于 `package.json` 的相关字段自动推断出构建规则,减少配置文件的编写,更加轻便与符合标准
|
12
|
+
- `exports`:根据入口文件推断构建目标与类型
|
13
|
+
- `imports`:定义路径别名,并在构建的时候自动 bundle 进来
|
14
|
+
- `type: module`:根据选项智能决定输出文件后缀,不需要考虑 `cjs` 与 `esm` 的适配问题
|
15
|
+
- `dependencies`、`peerDependencies`、`optionalDependencies`:自动将符合规则的依赖标记为 `external`
|
16
|
+
- `devDependencies`:将标记为开发依赖的 bundle 进对应的最终产物之中
|
17
|
+
- [ ] 构建工具:支持多种构建工具,无需纠结于用 swc 还是 esbuild 又或者是 tsc
|
18
|
+
- [x] `esbuild`
|
19
|
+
- [x] `swc`
|
20
|
+
- [ ] `typescript`
|
21
|
+
- [x] 工作空间友好:支持在 pnpm 下的工作空间开发范式
|
22
|
+
- [ ] 支持更多的 PM
|
23
|
+
- [ ] 更好的工作空间任务流
|
24
|
+
- [x] 类型定义文件:支持聚合生成类型定义文件
|
25
|
+
- [x] 监听模式:适配 rollup 的监听模式
|
26
|
+
- [x] 发布适配:支持同构生成 `package.json` 等相关字段
|
27
|
+
- [ ] 根据 `package.json` 中的路径自动替换 README.md 中的相对路径链接为对应的网络链接
|
28
|
+
- [x] CommonJS:产物兼容正在使用 cjs 的用户
|
29
|
+
- [ ] 插件化
|
30
|
+
- [ ] Dotenv:支持 dotenv 配置文件
|
31
|
+
- [ ] Replacer:支持替换文件内容
|
26
32
|
|
27
33
|
## 安装
|
28
34
|
|
29
|
-
目前只支持 pnpm,因为 workspace 的相关机制在 pnpm 的支持是最好的(主要也没时间支持别的工具了)。
|
30
|
-
|
31
35
|
```bash
|
32
|
-
|
36
|
+
npm i -D jiek
|
37
|
+
# or
|
38
|
+
pnpm i -D jiek
|
39
|
+
# or
|
40
|
+
yarn add -D jiek
|
33
41
|
```
|
34
42
|
|
35
|
-
##
|
36
|
-
|
37
|
-
有啥好用的?
|
38
|
-
|
39
|
-
- 简化你的导出规则,不需要去写一些能够自动化生成的代码
|
40
|
-
- 自然而然的对你的输入进行构建,按照统一的规则你可以几乎不用去写多余的配置
|
41
|
-
- 在构建的时候不再依赖预构建目标的依赖或者是整体的全量构建,每一次构建只需要关注自己的目标
|
42
|
-
- 预集成了一套完整的构建工具链,自动根据需求激活相关的插件进行工作
|
43
|
-
|
44
|
-
### build
|
43
|
+
## 快速起步
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
> 在这里你需要了解足够先进和现代的「[模块管理]()」以及「[导出策略]()」,在这里我们便是基于这俩点达成的一些自然而然的约定来实现的减轻负担。
|
49
|
-
|
50
|
-
接下来我们可以一步步的来看看我们的构建工具是如何工作的。
|
51
|
-
|
52
|
-
#### 定义入口
|
53
|
-
|
54
|
-
在这里我们可以简单的对 exports 进行一定的扩展,在这里我们把我们定义在 `package.json` 中的 `exports` 字段可以看作为我们的入口文件。在这里我们简单定义一个入口:
|
55
|
-
|
56
|
-
```json
|
57
|
-
{
|
58
|
-
"exports": "./src/index.ts"
|
59
|
-
}
|
60
|
-
```
|
45
|
+
通过一些简单的方式能又快又轻松的生成需要的产物。
|
61
46
|
|
62
|
-
|
47
|
+
- 在 `package.json` 中添加入口文件,这里需要设置为原文件路径。
|
63
48
|
|
64
|
-
|
49
|
+
你可以在 Node.js 文档中查看更多对于 [exports](https://nodejs.org/api/packages.html#exports) 的相关内容。
|
65
50
|
|
66
51
|
```json
|
67
52
|
{
|
68
|
-
|
69
|
-
"exports":
|
70
|
-
|
71
|
-
"types": "./dist/es/index.d.mts",
|
72
|
-
"default": "./dist/es/index.mjs"
|
73
|
-
},
|
74
|
-
"require": {
|
75
|
-
"types": "./dist/cjs/index.d.ts",
|
76
|
-
"default": "./dist/cjs/index.js"
|
77
|
-
}
|
78
|
-
}
|
53
|
+
...
|
54
|
+
"exports": "./src/index.ts",
|
55
|
+
...
|
79
56
|
}
|
80
57
|
```
|
81
58
|
|
82
|
-
|
83
|
-
|
84
|
-
> 在这里你肯定想问如果你有复杂的导出呢?或者说多个入口呢?在[这里](../pkger/README.md)你可以看到我们的工具的生成规则。
|
85
|
-
|
86
|
-
#### 运行指令
|
87
|
-
|
88
|
-
假设你有一个 pakcages 下面的包叫 `@monorepo/utils` ,那么你可以这样运行:
|
89
|
-
|
90
|
-
```shell
|
91
|
-
jiek build -f utils
|
92
|
-
```
|
93
|
-
|
94
|
-
是不是很简单呢?在这里我们只需要告诉工具我们的包名就可以了,其他的事情我们都不需要关心。
|
59
|
+
- 假设你在工作空间下有一个包名字为 `@monorepo/utils` ,那么你可以运行 `jb utils` 来构建这个包。
|
95
60
|
|
96
|
-
|
61
|
+
- 当你完成了开发的相关步骤后,在发布阶段你可以使用 `jk -f utils publish` 来发布你的包,本工具会自动转化并填充 `package.json` 对应的字段。
|
97
62
|
|
98
|
-
|
63
|
+
你可以添加 `-p/--preview` 参数来预览待发布的 `package.json` 的内容。
|
99
64
|
|
100
|
-
|
101
|
-
import { defineConfig } from 'jiek'
|
65
|
+
## CLI
|
102
66
|
|
103
|
-
|
104
|
-
|
105
|
-
output: 'lib'
|
106
|
-
}
|
107
|
-
})
|
67
|
+
```text
|
68
|
+
Usage: jk [options] [command]
|
108
69
|
```
|
109
70
|
|
110
|
-
|
111
|
-
|
112
|
-
一些关于本工具的设计思路和实现细节,不阅读也不会影响各位的使用,感兴趣的各位可以看看。
|
113
|
-
|
114
|
-
- 入口的约定:还没写好
|
115
|
-
- 插件的抉择:还没写好
|
116
|
-
|
117
|
-
#### 补充内容
|
118
|
-
|
119
|
-
- 关于样式
|
120
|
-
- 关于类型
|
121
|
-
- 关于 `monorepo`
|
122
|
-
|
123
|
-
#### 接下来要做的
|
71
|
+
## 为什么不使用 X?
|
124
72
|
|
125
|
-
|
126
|
-
- [ ] 工作空间构建流
|
127
|
-
- [ ] 依赖分析工具
|
128
|
-
- 本次构建哪些在 pacakge 中声明的依赖没用用到,可以移除(提供配置关闭该警告)
|
129
|
-
- 针对构建产物的依赖关系生成关系图(可配置颗粒度为文件或者导出方法)
|
73
|
+
在这里与 `jiek` 类似的工具有:[tsup](https://github.com/egoist/tsup)、[unbuild](https://github.com/unjs/unbuild)、[bunchee](https://github.com/huozhi/bunchee)、[pkgroll](https://github.com/privatenumber/pkgroll)、[tsdown](https://github.com/sxzz/tsdown)。但是他们都有着一些共同问题没有解决,比如说:
|
130
74
|
|
131
|
-
|
75
|
+
- `monorepo` 的支持存在一定的问题,在依赖工作空间其他的包时必须重新编译相关依赖
|
76
|
+
- 编写入口文件的规则过于繁琐,不够自然
|
77
|
+
- 无法处理 `tsconfig.json` 中的 `Project Reference` 相关问题
|
78
|
+
- 根据`conditions`
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
import { existsSync } from 'node:fs'
|
3
|
+
import { createRequire } from 'node:module'
|
4
|
+
import { dirname, resolve } from 'node:path'
|
5
|
+
import process from 'node:process'
|
6
|
+
|
7
|
+
process.env.JIEK_IS_ONLY_BUILD = 'true'
|
8
|
+
|
9
|
+
const __dirname = dirname(import.meta.url.replace('file://', ''))
|
10
|
+
if (existsSync(resolve(__dirname, '../.jiek-dev-tag'))) {
|
11
|
+
const require = createRequire(import.meta.url)
|
12
|
+
require('esbuild-register')
|
13
|
+
require('../src/cli-only-build.ts')
|
14
|
+
} else {
|
15
|
+
import('jiek/cli-only-build')
|
16
|
+
}
|