aronrepo 1.6.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -547
- package/dist/index.d.ts +5 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -1
- package/.github/CODE_OF_CONDUCT.md +0 -124
- package/.github/CONTRIBUTING.md +0 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -47
- package/.github/ISSUE_TEMPLATE/docs_request.yml +0 -24
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -19
- package/.github/workflows/commit-check.yml +0 -30
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/pull-request-title-check.yml +0 -23
- package/.github/workflows/release.yml +0 -35
- package/.github/workflows/test.yml +0 -30
- package/.github/workflows/type-check.yml +0 -28
- package/dist/bin/index +0 -26
- package/dist/bin/index.map +0 -7
package/README.md
CHANGED
|
@@ -1,569 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
<div align="center">
|
|
1
|
+

|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
<a href="https://repo.master.co">
|
|
6
|
-
<picture>
|
|
7
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/33840671/204220749-4536401e-20c4-49b7-bf37-b07fce15f1c2.svg">
|
|
8
|
-
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/33840671/204220755-744f6b4f-a90e-442f-bd30-53ce7995a8f8.svg">
|
|
9
|
-
<img alt="aronrepo" src="https://user-images.githubusercontent.com/33840671/204220755-744f6b4f-a90e-442f-bd30-53ce7995a8f8.svg" width="100%">
|
|
10
|
-
</picture>
|
|
11
|
-
</a>
|
|
12
|
-
</p>
|
|
13
|
-
<p align="center">A monorepo ecosystem integrating first-class packages and build systems</p>
|
|
3
|
+
# aronrepo
|
|
14
4
|
|
|
15
|
-
|
|
16
|
-
<a aria-label="overview" href="https://github.com/1aron/aronrepo">
|
|
17
|
-
<picture>
|
|
18
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=212022&style=for-the-badge">
|
|
19
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=f6f7f8&style=for-the-badge">
|
|
20
|
-
<img alt="NPM Version" src="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=f6f7f8&style=for-the-badge">
|
|
21
|
-
</picture>
|
|
22
|
-
</a>
|
|
23
|
-
<a aria-label="GitHub release (latest by date including pre-releases)" href="https://github.com/1aron/aronrepo/releases">
|
|
24
|
-
<picture>
|
|
25
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=212022&label=&style=for-the-badge&logo=github&logoColor=fff">
|
|
26
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=f6f7f8&label=&style=for-the-badge&logo=github&logoColor=%23000">
|
|
27
|
-
<img alt="NPM Version" src="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=f6f7f8&label=&style=for-the-badge&logo=github">
|
|
28
|
-
</picture>
|
|
29
|
-
</a>
|
|
30
|
-
<a aria-label="NPM Package" href="https://www.npmjs.com/package/aronrepo">
|
|
31
|
-
<picture>
|
|
32
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/npm/dm/aronrepo?color=212022&label=%20&logo=npm&style=for-the-badge">
|
|
33
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/npm/dm/aronrepo?color=f6f7f8&label=%20&logo=npm&style=for-the-badge">
|
|
34
|
-
<img alt="NPM package ( download / month )" src="https://img.shields.io/npm/dm/aronrepo?color=f6f7f8&label=%20&logo=npm&style=for-the-badge">
|
|
35
|
-
</picture>
|
|
36
|
-
</a>
|
|
37
|
-
<a aria-label="Follow @aron1tw" href="https://twitter.com/aron1tw">
|
|
38
|
-
<picture>
|
|
39
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/static/v1?label=%20&message=twitter&color=212022&logo=twitter&style=for-the-badge">
|
|
40
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
|
|
41
|
-
<img alt="Follow @mastercorg" src="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
|
|
42
|
-
</picture>
|
|
43
|
-
</a>
|
|
44
|
-
<a aria-label="Github Actions" href="https://github.com/1aron/aronrepo/actions/workflows/release.yml">
|
|
45
|
-
<picture>
|
|
46
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=212022&logo=githubactions&style=for-the-badge">
|
|
47
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
|
|
48
|
-
<img alt="Github release actions" src="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
|
|
49
|
-
</picture>
|
|
50
|
-
</a>
|
|
51
|
-
</p>
|
|
5
|
+
Facade package for the Aronrepo monorepo toolchain.
|
|
52
6
|
|
|
53
|
-
|
|
7
|
+
Use this package when you want a small programmatic entrypoint that names the Aronrepo packages available in the toolchain. The package has no runtime side effects and does not configure commitlint, changelog generation, or semantic-release by itself.
|
|
54
8
|
|
|
55
|
-
##
|
|
9
|
+
## Install
|
|
56
10
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
- Run the `build`, `dev`, `test`, `lint` commands across all workspaces
|
|
60
|
-
- Remember what you've built and skip the stuff that's already been computed
|
|
61
|
-
- Multiple workspaces work simultaneously, just like one workspace used to.
|
|
62
|
-
|
|
63
|
-

|
|
64
|
-
|
|
65
|
-
**Packing**
|
|
66
|
-
- An extremely fast bundler built on top of [esbuild](https://esbuild.github.io/)
|
|
67
|
-
- Output or watch multiple formats in one-linear command
|
|
68
|
-
- Support **ESM**, **CJS**, and **IIFE** JavaScript modules
|
|
69
|
-
- Support **CSS** bundle
|
|
70
|
-
- Generate `.d.ts` type declarations
|
|
71
|
-
- Extract options from `package.json`
|
|
72
|
-
- Prevent bundling `dependencies` and `peerDependencies` by `package.json`
|
|
73
|
-
|
|
74
|
-
**Versioning**
|
|
75
|
-
- Synchronize versions of packages in all workspaces
|
|
76
|
-
- Bump packages to a specific version by the `.workspaces` of `package.json`
|
|
77
|
-
- Bump versions by analyzing `dependencies` and `peerDependencies` of the workspace
|
|
78
|
-
- Prevent bumping versions for `private: true` packages
|
|
79
|
-
|
|
80
|
-
## Getting Started
|
|
81
|
-
|
|
82
|
-
Add `packages/**` to `.workspaces` of the root `./package.json`
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"workspaces": [
|
|
86
|
-
"packages/**"
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
Install CLI and core packages by `aronrepo`:
|
|
91
|
-
```bash
|
|
92
|
-
npm i aronrepo -D
|
|
93
|
-
```
|
|
94
|
-
- Requires `npm@>=7` when using `npm`
|
|
95
|
-
- Set [`auto-install-peers`](https://pnpm.io/next/npmrc#auto-install-peers) when using `pnpm`
|
|
96
|
-
- You can also manually install [`peerDependencies`](https://github.com/1aron/aronrepo/blob/beta/packages/aronrepo/package.json#L32-L41) for fixed versions
|
|
97
|
-
|
|
98
|
-
To create your first package, you may automate the required steps to define a new workspace using `npm init`.
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
npm init -w ./packages/a
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
When the package is ready, including the dependencies setup, run `npm i` in the project root directory to install all dependencies, including the workspaces.
|
|
105
|
-
|
|
106
|
-
## Pack
|
|
107
|
-
|
|
108
|
-
Bundling your TypeScript and CSS packages with zero configuration.
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
aron pack [entryPaths...]
|
|
11
|
+
```sh
|
|
12
|
+
pnpm add -D aronrepo
|
|
112
13
|
```
|
|
113
14
|
|
|
114
|
-
|
|
15
|
+
This package is ESM-only.
|
|
115
16
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### JavaScript packages
|
|
119
|
-
|
|
120
|
-
```diff
|
|
121
|
-
.
|
|
122
|
-
├── package.json
|
|
123
|
-
└── packages
|
|
124
|
-
└─── a
|
|
125
|
-
├─── src
|
|
126
|
-
│ ├─── index.ts
|
|
127
|
-
│ └─── index.browser.ts
|
|
128
|
-
+ ├─── dist
|
|
129
|
-
+ │ ├─── index.cjs
|
|
130
|
-
+ │ ├─── index.mjs
|
|
131
|
-
+ │ ├─── index.d.ts
|
|
132
|
-
+ │ └─── index.browser.ts
|
|
133
|
-
└─── package.json
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
Simultaneously output `cjs`, `esm`, `iife`, `type declarations` respectively according to `main`, `module`, `browser`, `types` of `package.json`
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"name": "a",
|
|
141
|
-
"scripts": {
|
|
142
|
-
"build": "aron pack",
|
|
143
|
-
"dev": "npm run build -- --watch"
|
|
144
|
-
},
|
|
145
|
-
"main": "dist/cjs/index.js",
|
|
146
|
-
"browser": "dist/index.browser.js",
|
|
147
|
-
"module": "dist/esm/index.js",
|
|
148
|
-
"types": "dist/index.d.ts",
|
|
149
|
-
"jsnext:main": "dist/esm/index.js",
|
|
150
|
-
"esnext": "dist/esm/index.js",
|
|
151
|
-
"exports": {
|
|
152
|
-
".": {
|
|
153
|
-
"require": "./dist/cjs/index.js",
|
|
154
|
-
"import": "./dist/esm/index.js",
|
|
155
|
-
"types": "./dist/index.d.ts"
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
"files": [
|
|
159
|
-
"dist"
|
|
160
|
-
]
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
If you only want to pack specific javascript modules, remove the corresponding entry point from `package.json`.
|
|
164
|
-
|
|
165
|
-
Run with the above configuration:
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
npm run build
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
<img width="628" alt="cjs-esm-iife-type-pack" src="https://user-images.githubusercontent.com/33840671/204300928-23e2d2f9-b0ed-4feb-b7cf-1b9ba6cf8127.png">
|
|
172
|
-
|
|
173
|
-
Now import the above package `a` in your project or publish it.
|
|
17
|
+
## Usage
|
|
174
18
|
|
|
175
19
|
```ts
|
|
176
|
-
import '
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### CSS packages
|
|
20
|
+
import { packages } from 'aronrepo'
|
|
180
21
|
|
|
181
|
-
|
|
182
|
-
.
|
|
183
|
-
├── package.json
|
|
184
|
-
└── packages
|
|
185
|
-
└─── b
|
|
186
|
-
├─── src
|
|
187
|
-
│ └─── index.css
|
|
188
|
-
+ ├─── dist
|
|
189
|
-
+ │ └─── index.css
|
|
190
|
-
└─── package.json
|
|
22
|
+
console.log(packages)
|
|
191
23
|
```
|
|
192
24
|
|
|
193
|
-
|
|
25
|
+
`packages` is a readonly list of the Aronrepo toolchain package names:
|
|
194
26
|
|
|
195
|
-
```json
|
|
196
|
-
{
|
|
197
|
-
"name": "b",
|
|
198
|
-
"scripts": {
|
|
199
|
-
"build": "aron pack",
|
|
200
|
-
"dev": "npm run build -- --watch"
|
|
201
|
-
},
|
|
202
|
-
"main": "./dist/index.css",
|
|
203
|
-
"style": "./dist/index.css",
|
|
204
|
-
"files": [
|
|
205
|
-
"dist"
|
|
206
|
-
]
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Run with the above configuration:
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
npm run build
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
<img width="523" alt="css-pack" src="https://user-images.githubusercontent.com/33840671/204450194-7831c448-2e21-4ce8-8c45-5139febc10e6.png">
|
|
217
|
-
|
|
218
|
-
Now import the above package `b` in your project or publish it.
|
|
219
|
-
|
|
220
|
-
```css
|
|
221
|
-
@import 'b'
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Multiple entry points
|
|
225
|
-
|
|
226
|
-
`aron pack <entryPaths...>` supports glob patterns that let you specify multiple entry points at once, including the output of nested directories.
|
|
227
|
-
|
|
228
|
-
Specifying an entry point will cause the JavaScript output `format` to be preset to `cjs,esm`.
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
aron src/**/*.ts
|
|
232
|
-
```
|
|
233
|
-
```diff
|
|
234
|
-
.
|
|
235
|
-
├── package.json
|
|
236
|
-
└── packages
|
|
237
|
-
└─── a
|
|
238
|
-
├─── src
|
|
239
|
-
│ ├─── index.ts
|
|
240
|
-
│ └─── utils
|
|
241
|
-
│ └─── exec.ts
|
|
242
|
-
+ ├─── dist
|
|
243
|
-
+ │ ├─── index.cjs
|
|
244
|
-
+ │ ├─── index.mjs
|
|
245
|
-
+ │ └─── utils
|
|
246
|
-
+ │ ├─── exec.cjs
|
|
247
|
-
+ │ └─── exec.mjs
|
|
248
|
-
└─── package.json
|
|
249
|
-
```
|
|
250
|
-
The same goes for multiple CSS entries:
|
|
251
|
-
```
|
|
252
|
-
aron src/**/*.css
|
|
253
|
-
```
|
|
254
|
-
```diff
|
|
255
|
-
.
|
|
256
|
-
├── package.json
|
|
257
|
-
└── packages
|
|
258
|
-
└─── a
|
|
259
|
-
├─── src
|
|
260
|
-
│ ├─── index.css
|
|
261
|
-
│ └─── components
|
|
262
|
-
│ ├─── card.css
|
|
263
|
-
│ └─── button.css
|
|
264
|
-
+ ├─── dist
|
|
265
|
-
+ │ ├─── index.css
|
|
266
|
-
+ │ └─── components
|
|
267
|
-
+ │ ├─── card.css
|
|
268
|
-
+ │ └─── button.css
|
|
269
|
-
└─── package.json
|
|
270
|
-
```
|
|
271
|
-
Usually, it would be best to bundle CSS packages through a main `index.css` and output other CSS files so developers can import on demand instead of the whole package. For example [@master/keyframes.css](https://www.npmjs.com/package/@master/keyframes.css)
|
|
272
|
-
|
|
273
|
-
### Exclude external dependencies
|
|
274
|
-
`aron pack` automatically excludes external dependencies to be bundled by the `.dependencies` and `peerDependencies` of `package.json`
|
|
275
|
-
|
|
276
|
-
`src/index.ts`
|
|
277
27
|
```ts
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
{
|
|
286
|
-
"name": "externals",
|
|
287
|
-
"main": "dist/cjs/index.js",
|
|
288
|
-
"exports": {
|
|
289
|
-
".": {
|
|
290
|
-
"require": "./dist/cjs/index.js"
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
"files": [
|
|
294
|
-
"dist"
|
|
295
|
-
],
|
|
296
|
-
"dependencies": {
|
|
297
|
-
"@master/css": "^2.0.0-beta.55"
|
|
298
|
-
},
|
|
299
|
-
"peerDependencies": {
|
|
300
|
-
"@master/style-element.react": "^1.1.6"
|
|
301
|
-
},
|
|
302
|
-
"devDependencies": {
|
|
303
|
-
"@master/css.webpack": "^2.0.0-beta.55"
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
Run with the above setup:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
aron pack --platform node
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
<img width="568" alt="exclude-externals-pack" src="https://user-images.githubusercontent.com/33840671/204489494-10854837-be15-49fd-a1c8-0e02fb3e174a.png">
|
|
315
|
-
|
|
316
|
-
`@master/css.webpack` is bundled into `dist/cjs/index.js`, except for `@master/css` and `@master/style-element.react`.
|
|
317
|
-
|
|
318
|
-
So if there is an external package that needs to be bundled, you just install it to `devDependencies` via `npm i <some-package> --save-dev`, then `aron pack` will not exclude it.
|
|
319
|
-
|
|
320
|
-
### Multiple outputs
|
|
321
|
-
|
|
322
|
-
`aron pack` defaults to pack multiple outputs with different formats and platforms according to `exports` `bin` in `package.json`.
|
|
323
|
-
|
|
324
|
-
```diff
|
|
325
|
-
.
|
|
326
|
-
├── package.json
|
|
327
|
-
└── packages
|
|
328
|
-
└─── a
|
|
329
|
-
├─── src
|
|
330
|
-
│ ├─── index.ts
|
|
331
|
-
│ └─── utils
|
|
332
|
-
│ └─── exec.ts
|
|
333
|
-
+ ├─── dist
|
|
334
|
-
+ │ ├─── index.cjs
|
|
335
|
-
+ │ ├─── index.mjs
|
|
336
|
-
+ │ └─── utils
|
|
337
|
-
+ │ ├─── exec.cjs
|
|
338
|
-
+ │ └─── exec.mjs
|
|
339
|
-
└─── package.json
|
|
340
|
-
```
|
|
341
|
-
`package.json`
|
|
342
|
-
```json
|
|
343
|
-
{
|
|
344
|
-
"name": "externals",
|
|
345
|
-
"exports": {
|
|
346
|
-
".": {
|
|
347
|
-
"require": "./dist/cjs/index.js",
|
|
348
|
-
"import": "./dist/esm/index.js"
|
|
349
|
-
},
|
|
350
|
-
"./utils/exec": {
|
|
351
|
-
"require": "./dist/utils/exec.cjs",
|
|
352
|
-
"import": "./dist/utils/exec.mjs"
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
Any nested conditions in `exports` like `node`, `browser`, `default`, `require`, and `import` will be mapped to ESBuild’s `format` and `platform` options.
|
|
358
|
-
|
|
359
|
-
## Version
|
|
360
|
-
Smartly bump all workspace-dependent packages to specific versions.
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
aron version <version>
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
[Check out the available options here for now](https://github.com/1aron/aronrepo/blob/beta/packages/aronrepo/src/commands/version.ts#L16-L18)
|
|
367
|
-
|
|
368
|
-
The command automatically bumps the version of all packages by scanning all workspaces and analyzing `dependencies` and `peerDependencies` of `package.json`
|
|
369
|
-
|
|
370
|
-
```diff
|
|
371
|
-
.
|
|
372
|
-
├── package.json
|
|
373
|
-
└── packages
|
|
374
|
-
├─── a
|
|
375
|
-
| └─── package.json
|
|
376
|
-
├─── b
|
|
377
|
-
| └─── package.json
|
|
378
|
-
└─── c
|
|
379
|
-
└─── package.json
|
|
28
|
+
[
|
|
29
|
+
'@aronrepo/commitlint-config',
|
|
30
|
+
'@aronrepo/conventional-commits',
|
|
31
|
+
'@aronrepo/conventional-changelog-config',
|
|
32
|
+
'@aronrepo/semantic-release-config',
|
|
33
|
+
'@aronrepo/semantic-release-pnpm'
|
|
34
|
+
]
|
|
380
35
|
```
|
|
381
36
|
|
|
382
|
-
|
|
37
|
+
## Toolchain Packages
|
|
383
38
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
<img width="628" alt="version" src="https://user-images.githubusercontent.com/33840671/204528593-a7a982f1-2e62-4a8e-95c3-122963f2254c.png">
|
|
391
|
-
|
|
392
|
-
`packages/a/package.json`
|
|
393
|
-
|
|
394
|
-
```diff
|
|
395
|
-
{
|
|
396
|
-
"name": "a",
|
|
397
|
-
+ "version": "^1.2.0",
|
|
398
|
-
"dependencies": {
|
|
399
|
-
- "b": "",
|
|
400
|
-
+ "b": "^1.2.0"
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
`packages/b/package.json`
|
|
406
|
-
|
|
407
|
-
```diff
|
|
408
|
-
{
|
|
409
|
-
"name": "b",
|
|
410
|
-
+ "version": "^1.2.0"
|
|
411
|
-
}
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
`packages/c/package.json`
|
|
415
|
-
|
|
416
|
-
```diff
|
|
417
|
-
{
|
|
418
|
-
"name": "c",
|
|
419
|
-
+ "version": "^1.2.0",
|
|
420
|
-
"peerDependencies": {
|
|
421
|
-
- "a": "",
|
|
422
|
-
+ "b": "^1.2.0"
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
For version range, check out the [semver](https://github.com/npm/node-semver#versions)
|
|
428
|
-
|
|
429
|
-
Typically, you would use [Aron's semantic release](https://github.com/1aron/aronrepo/tree/main/packages/semantic-release-config) with CI to automate the version and release commands.
|
|
430
|
-
|
|
431
|
-
## Build system for monorepo
|
|
432
|
-
|
|
433
|
-
Most workspace packages will pre-set script commands, such as `build`, `test`, and `lint`. Since features depend on each other, builds will be executed sequentially.
|
|
434
|
-
|
|
435
|
-
You can now use [Turborepo](https://turbo.build/repo) to easily build complex systems and run commands in one-linear.
|
|
436
|
-
|
|
437
|
-

|
|
438
|
-
|
|
439
|
-
Set up the `/turbo.json`:
|
|
440
|
-
|
|
441
|
-
```json
|
|
442
|
-
{
|
|
443
|
-
"$schema": "https://turbo.build/schema.json",
|
|
444
|
-
"pipeline": {
|
|
445
|
-
"dev": {
|
|
446
|
-
"cache": false,
|
|
447
|
-
"dependsOn": ["^build"]
|
|
448
|
-
},
|
|
449
|
-
"build": {
|
|
450
|
-
"dependsOn": ["^build"],
|
|
451
|
-
"outputs": ["dist/**"]
|
|
452
|
-
},
|
|
453
|
-
"test": {
|
|
454
|
-
"outputs": [],
|
|
455
|
-
"inputs": [
|
|
456
|
-
"src/**/*.tsx",
|
|
457
|
-
"src/**/*.ts",
|
|
458
|
-
"tests/**/*.ts"
|
|
459
|
-
]
|
|
460
|
-
},
|
|
461
|
-
"lint": {
|
|
462
|
-
"outputs": []
|
|
463
|
-
},
|
|
464
|
-
"type-check": {
|
|
465
|
-
"outputs": ["dist/**"]
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
Set up the scripts of `/package.json`:
|
|
472
|
-
```json
|
|
473
|
-
{
|
|
474
|
-
"scripts": {
|
|
475
|
-
"dev": "turbo run dev",
|
|
476
|
-
"build": "turbo run build",
|
|
477
|
-
"test": "turbo run test --parallel",
|
|
478
|
-
"lint": "turbo run lint --parallel",
|
|
479
|
-
"type-check": "turbo run type-check --parallel"
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
In most cases, `dev` and `build` cannot add the `--parallel` flag, which breaks their dependencies.
|
|
484
|
-
|
|
485
|
-
Typical workspace scripts for authoring a package:
|
|
486
|
-
|
|
487
|
-
```json
|
|
488
|
-
{
|
|
489
|
-
"scripts": {
|
|
490
|
-
"build": "aron pack",
|
|
491
|
-
"dev": "npm run build -- --watch",
|
|
492
|
-
"test": "jest",
|
|
493
|
-
"type-check": "tsc --noEmit",
|
|
494
|
-
"lint": "eslint src"
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
From now on, you only need to **run the command in the project root** after opening the project.
|
|
500
|
-
|
|
501
|
-
```bash
|
|
502
|
-
npm run dev
|
|
503
|
-
```
|
|
504
|
-
Build your application or package:
|
|
505
|
-
```bash
|
|
506
|
-
npm run build
|
|
507
|
-
```
|
|
508
|
-
Test your business logic or UI by running scripts:
|
|
509
|
-
```bash
|
|
510
|
-
npm run test
|
|
511
|
-
```
|
|
512
|
-
Find and fix problems in JavaScript code before building:
|
|
513
|
-
```bash
|
|
514
|
-
npm run lint
|
|
515
|
-
```
|
|
516
|
-
Improve reliability with TypeScript's type checking:
|
|
517
|
-
```bash
|
|
518
|
-
npm run type-check
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
### Continuous Integration
|
|
522
|
-
|
|
523
|
-
With the well-configured build system, almost all commands can be automated through CI, taking GitHub Actions as an example:
|
|
524
|
-
|
|
525
|
-
Build automated tests on the `beta`, the `main`, and the pull request stream:
|
|
526
|
-
```yml
|
|
527
|
-
name: Test
|
|
528
|
-
on:
|
|
529
|
-
push:
|
|
530
|
-
branches:
|
|
531
|
-
- main
|
|
532
|
-
- beta
|
|
533
|
-
pull_request_target:
|
|
534
|
-
types:
|
|
535
|
-
- opened
|
|
536
|
-
- synchronize
|
|
537
|
-
|
|
538
|
-
jobs:
|
|
539
|
-
version:
|
|
540
|
-
timeout-minutes: 15
|
|
541
|
-
runs-on: ubuntu-20.04
|
|
542
|
-
strategy:
|
|
543
|
-
matrix:
|
|
544
|
-
node-version: [18.12.1]
|
|
545
|
-
steps:
|
|
546
|
-
- uses: actions/checkout@v3
|
|
547
|
-
- uses: actions/setup-node@v3
|
|
548
|
-
with:
|
|
549
|
-
node-version: ${{ matrix.node-version }}
|
|
550
|
-
cache: 'npm'
|
|
551
|
-
- run: npm ci
|
|
552
|
-
- run: npm run build
|
|
553
|
-
- run: npm run test
|
|
554
|
-
```
|
|
555
|
-
The same goes for `lint` and `type-check`.
|
|
39
|
+
- `@aronrepo/conventional-commits`: commit types, release impact rules, changelog groups, and AI agent policy.
|
|
40
|
+
- `@aronrepo/commitlint-config`: commitlint rules for Aronrepo commit and PR title validation.
|
|
41
|
+
- `@aronrepo/conventional-changelog-config`: parser, writer, and recommended bump options for conventional changelog tooling.
|
|
42
|
+
- `@aronrepo/semantic-release-config`: semantic-release defaults and workspace package discovery.
|
|
43
|
+
- `@aronrepo/semantic-release-pnpm`: semantic-release plugin for publishing pnpm workspace packages.
|
|
556
44
|
|
|
557
|
-
|
|
45
|
+
## AI Coding Adoption
|
|
558
46
|
|
|
559
|
-
|
|
47
|
+
For a complete adoption prompt that an AI coding agent can use in another repository, see the root guide:
|
|
560
48
|
|
|
561
|
-
|
|
49
|
+
- [AI Coding Integration](https://github.com/1aron/aronrepo/blob/main/docs/ai-coding.md)
|
|
562
50
|
|
|
563
|
-
|
|
564
|
-
<picture>
|
|
565
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=212022&style=for-the-badge">
|
|
566
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=f6f7f8&style=for-the-badge">
|
|
567
|
-
<img alt="NPM Version" src="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=f6f7f8&style=for-the-badge">
|
|
568
|
-
</picture>
|
|
569
|
-
</a>
|
|
51
|
+
The prompt tells the agent to inspect the target repository first, install the relevant Aronrepo packages, configure commitlint and semantic-release, document release behavior, and add agent guidance without unrelated refactors.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
//#region src/index.d.ts
|
|
2
|
+
declare const packages: readonly ["@aronrepo/commitlint-config", "@aronrepo/conventional-commits", "@aronrepo/conventional-changelog-config", "@aronrepo/semantic-release-config", "@aronrepo/semantic-release-pnpm"];
|
|
3
|
+
//#endregion
|
|
4
|
+
export { packages };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/index.ts
|
|
2
|
+
const packages = [
|
|
3
|
+
"@aronrepo/commitlint-config",
|
|
4
|
+
"@aronrepo/conventional-commits",
|
|
5
|
+
"@aronrepo/conventional-changelog-config",
|
|
6
|
+
"@aronrepo/semantic-release-config",
|
|
7
|
+
"@aronrepo/semantic-release-pnpm"
|
|
8
|
+
];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { packages };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export const packages = [\n '@aronrepo/commitlint-config',\n '@aronrepo/conventional-commits',\n '@aronrepo/conventional-changelog-config',\n '@aronrepo/semantic-release-config',\n '@aronrepo/semantic-release-pnpm'\n] as const\n"],"mappings":";AAAA,MAAa,WAAW;CACpB;CACA;CACA;CACA;CACA;AACJ"}
|
package/package.json
CHANGED
|
@@ -1 +1,44 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "aronrepo",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "Facade package for the Aronrepo monorepo toolchain.",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/1aron/aronrepo.git",
|
|
10
|
+
"directory": "packages/aronrepo"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"provenance": true
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"typescript": "*"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@aronrepo/commitlint-config": "^2.0.0",
|
|
33
|
+
"@aronrepo/conventional-commits": "^2.0.0",
|
|
34
|
+
"@aronrepo/semantic-release-config": "^2.0.0",
|
|
35
|
+
"@aronrepo/conventional-changelog-config": "^2.0.0"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsdown",
|
|
39
|
+
"dev": "tsdown --watch",
|
|
40
|
+
"test": "vitest",
|
|
41
|
+
"type-check": "tsc --noEmit",
|
|
42
|
+
"lint": "eslint"
|
|
43
|
+
}
|
|
44
|
+
}
|