Skip to content

Commit 0205864

Browse files
authored
feat(create-rslib): setup Node.js package templates (#319)
1 parent c8ae3a7 commit 0205864

File tree

23 files changed

+215
-51
lines changed

23 files changed

+215
-51
lines changed

packages/create-rslib/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"create-rstack": "1.0.7"
3232
},
3333
"devDependencies": {
34+
"@rslib/core": "workspace:*",
3435
"@rslib/tsconfig": "workspace:*",
3536
"@types/fs-extra": "^11.0.4",
3637
"@types/node": "~18.19.39",

packages/create-rslib/src/index.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,21 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
1313
async function getTemplateName({ template }: Argv) {
1414
if (typeof template === 'string') {
1515
const pair = template.split('-');
16-
const language = pair[1] ?? 'js';
17-
const type = pair[0];
18-
return `${type}-${language}`;
16+
const lang = pair[pair.length - 1];
17+
if (lang && ['js', 'ts'].includes(lang)) {
18+
return template;
19+
}
20+
// default to ts
21+
return `${template}-ts`;
1922
}
2023

2124
const type = checkCancel<string>(
2225
await select({
2326
message: 'Select template',
24-
options: [{ value: 'example', label: 'Example' }],
27+
options: [
28+
{ value: 'node-dual', label: 'Node.js dual ESM/CJS package' },
29+
{ value: 'node-esm', label: 'Node.js pure ESM package' },
30+
],
2531
}),
2632
);
2733

@@ -39,14 +45,14 @@ async function getTemplateName({ template }: Argv) {
3945
}
4046

4147
function mapESLintTemplate(templateName: string) {
42-
const language = templateName.split('-')[1];
48+
const language = templateName.split('-').pop();
4349
return `vanilla-${language}` as ESLintTemplateName;
4450
}
4551

4652
create({
4753
root: path.resolve(__dirname, '..'),
4854
name: 'rslib',
49-
templates: ['example-js', 'example-ts'],
55+
templates: ['node-dual-js', 'node-dual-ts', 'node-esm-js', 'node-esm-ts'],
5056
getTemplateName,
5157
mapESLintTemplate,
5258
});

packages/create-rslib/template-example-js/package.json

Lines changed: 0 additions & 12 deletions
This file was deleted.

packages/create-rslib/template-example-js/rslib.config.mjs

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/create-rslib/template-example-ts/package.json

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/create-rslib/template-example-ts/rslib.config.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "rslib-node-dual-js",
3+
"version": "0.0.0",
4+
"type": "module",
5+
"exports": {
6+
".": {
7+
"import": "./dist/index.js",
8+
"require": "./dist/index.cjs"
9+
}
10+
},
11+
"main": "./dist/index.cjs",
12+
"module": "./dist/index.js",
13+
"files": [
14+
"dist"
15+
],
16+
"scripts": {
17+
"build": "rslib build",
18+
"dev": "rslib build --watch"
19+
},
20+
"devDependencies": {
21+
"@rslib/core": "workspace:*"
22+
}
23+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { defineConfig } from '@rslib/core';
2+
3+
export default defineConfig({
4+
lib: [
5+
{
6+
format: 'esm',
7+
syntax: 'es2021',
8+
},
9+
{
10+
format: 'cjs',
11+
syntax: 'es2021',
12+
},
13+
],
14+
output: { target: 'node' },
15+
});
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"name": "rslib-node-dual-ts",
3+
"version": "0.0.0",
4+
"type": "module",
5+
"exports": {
6+
".": {
7+
"types": "./dist/index.d.ts",
8+
"import": "./dist/index.js",
9+
"require": "./dist/index.cjs"
10+
}
11+
},
12+
"main": "./dist/index.cjs",
13+
"module": "./dist/index.js",
14+
"types": "./dist/index.d.ts",
15+
"files": [
16+
"dist"
17+
],
18+
"scripts": {
19+
"build": "rslib build",
20+
"dev": "rslib build --watch"
21+
},
22+
"devDependencies": {
23+
"@rslib/core": "workspace:*",
24+
"typescript": "^5.6.3"
25+
}
26+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { defineConfig } from '@rslib/core';
2+
3+
export default defineConfig({
4+
lib: [
5+
{
6+
format: 'esm',
7+
syntax: 'es2021',
8+
dts: {},
9+
},
10+
{
11+
format: 'cjs',
12+
syntax: 'es2021',
13+
},
14+
],
15+
output: { target: 'node' },
16+
});
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "rslib-node-esm-js",
3+
"version": "0.0.0",
4+
"type": "module",
5+
"exports": {
6+
".": {
7+
"import": "./dist/index.js"
8+
}
9+
},
10+
"module": "./dist/index.js",
11+
"files": [
12+
"dist"
13+
],
14+
"scripts": {
15+
"build": "rslib build",
16+
"dev": "rslib build --watch"
17+
},
18+
"devDependencies": {
19+
"@rslib/core": "workspace:*"
20+
}
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { defineConfig } from '@rslib/core';
2+
3+
export default defineConfig({
4+
lib: [
5+
{
6+
format: 'esm',
7+
syntax: 'es2021',
8+
},
9+
],
10+
output: { target: 'node' },
11+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function example() {
2+
return 'hello world';
3+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "rslib-node-esm-ts",
3+
"version": "0.0.0",
4+
"type": "module",
5+
"exports": {
6+
".": {
7+
"types": "./dist/index.d.ts",
8+
"import": "./dist/index.js"
9+
}
10+
},
11+
"module": "./dist/index.js",
12+
"types": "./dist/index.d.ts",
13+
"files": [
14+
"dist"
15+
],
16+
"scripts": {
17+
"build": "rslib build",
18+
"dev": "rslib build --watch"
19+
},
20+
"devDependencies": {
21+
"@rslib/core": "workspace:*",
22+
"typescript": "^5.6.3"
23+
}
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { defineConfig } from '@rslib/core';
2+
3+
export default defineConfig({
4+
lib: [
5+
{
6+
format: 'esm',
7+
syntax: 'es2021',
8+
dts: {},
9+
},
10+
],
11+
output: { target: 'node' },
12+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function example(): string {
2+
return 'hello world';
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"compilerOptions": {
3+
"target": "ES2021",
4+
"lib": ["DOM", "ES2021"],
5+
"module": "ESNext",
6+
"noEmit": true,
7+
"strict": true,
8+
"skipLibCheck": true,
9+
"isolatedModules": true,
10+
"resolveJsonModule": true,
11+
"moduleResolution": "bundler",
12+
"useDefineForClassFields": true,
13+
"allowImportingTsExtensions": true
14+
},
15+
"include": ["src"]
16+
}

packages/create-rslib/test/index.test.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,36 @@ import { join } from 'node:path';
33
import { expect, test } from 'vitest';
44
import { createAndValidate } from './helper';
55

6-
test('should create example-js project as expected', async () => {
7-
createAndValidate(__dirname, 'example-js');
6+
test('should create node-dual-js project as expected', async () => {
7+
createAndValidate(__dirname, 'node-dual-js');
88
});
99

10-
test('should create example-ts project as expected', async () => {
11-
createAndValidate(__dirname, 'example-ts');
10+
test('should create node-dual-ts project as expected', async () => {
11+
createAndValidate(__dirname, 'node-dual-ts');
12+
});
13+
14+
test('should create node-esm-js project as expected', async () => {
15+
createAndValidate(__dirname, 'node-esm-js');
16+
});
17+
18+
test('should create node-esm-ts project as expected', async () => {
19+
createAndValidate(__dirname, 'node-esm-ts');
1220
});
1321

1422
test('should allow to create project in sub dir', async () => {
15-
createAndValidate(__dirname, 'example', {
23+
createAndValidate(__dirname, 'node-esm-js', {
1624
name: 'test-temp-dir/rslib-project',
1725
});
1826
});
1927

2028
test('should allow to create project in relative dir', async () => {
21-
createAndValidate(__dirname, 'example', {
29+
createAndValidate(__dirname, 'node-esm-js', {
2230
name: './test-temp-relative-dir',
2331
});
2432
});
2533

2634
test('should create project with eslint as expected', async () => {
27-
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', {
35+
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', {
2836
name: 'test-temp-eslint',
2937
tools: ['eslint'],
3038
clean: false,
@@ -35,7 +43,7 @@ test('should create project with eslint as expected', async () => {
3543
});
3644

3745
test('should create project with prettier as expected', async () => {
38-
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', {
46+
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', {
3947
name: 'test-temp-prettier',
4048
tools: ['prettier'],
4149
clean: false,
@@ -46,7 +54,7 @@ test('should create project with prettier as expected', async () => {
4654
});
4755

4856
test('should create project with eslint and prettier as expected', async () => {
49-
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', {
57+
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', {
5058
name: 'test-temp-eslint-prettier',
5159
tools: ['eslint', 'prettier'],
5260
clean: false,
@@ -59,7 +67,7 @@ test('should create project with eslint and prettier as expected', async () => {
5967
});
6068

6169
test('should create project with biome as expected', async () => {
62-
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', {
70+
const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', {
6371
name: 'test-temp-eslint',
6472
tools: ['biome'],
6573
clean: false,

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

website/docs/en/guide/start/quick-start.mdx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,17 @@ import { PackageManagerTabs } from '@theme';
3838

3939
Then follow the prompts to complete the operation.
4040

41+
### Templates
42+
43+
When creating a project, you can choose from the following templates provided by `create-rslib`:
44+
45+
| Template | Description |
46+
| ------------ | -------------------------------------------------- |
47+
| node-dual-js | Node.js dual ESM/CJS package |
48+
| node-dual-ts | Node.js dual ESM/CJS package written in TypeScript |
49+
| node-esm-js | Node.js pure ESM package |
50+
| node-esm-ts | Node.js pure ESM package written in TypeScript |
51+
4152
### Optional Tools
4253

4354
`create-rslib` can help you set up some commonly used tools, including [Biome](https://github.com/biomejs/biome), [ESLint](https://github.com/eslint/eslint), and [prettier](https://github.com/prettier/prettier). You can use the arrow keys and the space bar to make your selections. If you don't need these tools, you can simply press Enter to skip.

0 commit comments

Comments
 (0)