From 438a2eb2847fec1c84fa3d7b2f7b9eb9bcbe7544 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 22 Oct 2024 17:47:27 +0800 Subject: [PATCH 1/4] feat(create-rslib): setup Node.js package templates --- packages/create-rslib/package.json | 1 + packages/create-rslib/src/index.ts | 5 +++- .../template-example-js/package.json | 12 --------- .../template-example-js/rslib.config.mjs | 5 ---- .../template-example-ts/package.json | 13 ---------- .../template-example-ts/rslib.config.ts | 5 ---- .../template-node-dual-js/package.json | 23 ++++++++++++++++ .../template-node-dual-js/rslib.config.mjs | 15 +++++++++++ .../src/index.js | 0 .../template-node-dual-ts/package.json | 26 +++++++++++++++++++ .../template-node-dual-ts/rslib.config.ts | 16 ++++++++++++ .../src/index.ts | 0 .../tsconfig.json | 0 .../template-node-esm-js/package.json | 21 +++++++++++++++ .../template-node-esm-js/rslib.config.mjs | 11 ++++++++ .../template-node-esm-js/src/index.js | 3 +++ .../template-node-esm-ts/package.json | 24 +++++++++++++++++ .../template-node-esm-ts/rslib.config.ts | 12 +++++++++ .../template-node-esm-ts/src/index.ts | 3 +++ .../template-node-esm-ts/tsconfig.json | 16 ++++++++++++ pnpm-lock.yaml | 3 +++ website/docs/en/guide/start/quick-start.mdx | 11 ++++++++ 22 files changed, 189 insertions(+), 36 deletions(-) delete mode 100644 packages/create-rslib/template-example-js/package.json delete mode 100644 packages/create-rslib/template-example-js/rslib.config.mjs delete mode 100644 packages/create-rslib/template-example-ts/package.json delete mode 100644 packages/create-rslib/template-example-ts/rslib.config.ts create mode 100644 packages/create-rslib/template-node-dual-js/package.json create mode 100644 packages/create-rslib/template-node-dual-js/rslib.config.mjs rename packages/create-rslib/{template-example-js => template-node-dual-js}/src/index.js (100%) create mode 100644 packages/create-rslib/template-node-dual-ts/package.json create mode 100644 packages/create-rslib/template-node-dual-ts/rslib.config.ts rename packages/create-rslib/{template-example-ts => template-node-dual-ts}/src/index.ts (100%) rename packages/create-rslib/{template-example-ts => template-node-dual-ts}/tsconfig.json (100%) create mode 100644 packages/create-rslib/template-node-esm-js/package.json create mode 100644 packages/create-rslib/template-node-esm-js/rslib.config.mjs create mode 100644 packages/create-rslib/template-node-esm-js/src/index.js create mode 100644 packages/create-rslib/template-node-esm-ts/package.json create mode 100644 packages/create-rslib/template-node-esm-ts/rslib.config.ts create mode 100644 packages/create-rslib/template-node-esm-ts/src/index.ts create mode 100644 packages/create-rslib/template-node-esm-ts/tsconfig.json diff --git a/packages/create-rslib/package.json b/packages/create-rslib/package.json index 6de943609..6e538ae8a 100644 --- a/packages/create-rslib/package.json +++ b/packages/create-rslib/package.json @@ -31,6 +31,7 @@ "create-rstack": "1.0.7" }, "devDependencies": { + "@rslib/core": "workspace:*", "@rslib/tsconfig": "workspace:*", "@types/fs-extra": "^11.0.4", "@types/node": "~18.19.39", diff --git a/packages/create-rslib/src/index.ts b/packages/create-rslib/src/index.ts index 2f9662f10..3e144517b 100644 --- a/packages/create-rslib/src/index.ts +++ b/packages/create-rslib/src/index.ts @@ -21,7 +21,10 @@ async function getTemplateName({ template }: Argv) { const type = checkCancel( await select({ message: 'Select template', - options: [{ value: 'example', label: 'Example' }], + options: [ + { value: 'node-dual', label: 'Node.js dual ESM/CJS package' }, + { value: 'node-esm', label: 'Node.js pure ESM package' }, + ], }), ); diff --git a/packages/create-rslib/template-example-js/package.json b/packages/create-rslib/template-example-js/package.json deleted file mode 100644 index b50194614..000000000 --- a/packages/create-rslib/template-example-js/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "rslib-vanilla-js", - "version": "1.0.0", - "private": true, - "scripts": { - "build": "rslib build", - "dev": "rslib build --watch" - }, - "devDependencies": { - "@rslib/core": "workspace:*" - } -} diff --git a/packages/create-rslib/template-example-js/rslib.config.mjs b/packages/create-rslib/template-example-js/rslib.config.mjs deleted file mode 100644 index dcd096638..000000000 --- a/packages/create-rslib/template-example-js/rslib.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { defineConfig } from '@rslib/core'; - -export default defineConfig({ - lib: [{ format: 'esm' }], -}); diff --git a/packages/create-rslib/template-example-ts/package.json b/packages/create-rslib/template-example-ts/package.json deleted file mode 100644 index d8eebc175..000000000 --- a/packages/create-rslib/template-example-ts/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "rslib-example-ts", - "version": "1.0.0", - "private": true, - "scripts": { - "build": "rslib build", - "dev": "rslib build --watch" - }, - "devDependencies": { - "@rslib/core": "workspace:*", - "typescript": "^5.6.3" - } -} diff --git a/packages/create-rslib/template-example-ts/rslib.config.ts b/packages/create-rslib/template-example-ts/rslib.config.ts deleted file mode 100644 index dcd096638..000000000 --- a/packages/create-rslib/template-example-ts/rslib.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { defineConfig } from '@rslib/core'; - -export default defineConfig({ - lib: [{ format: 'esm' }], -}); diff --git a/packages/create-rslib/template-node-dual-js/package.json b/packages/create-rslib/template-node-dual-js/package.json new file mode 100644 index 000000000..89901052e --- /dev/null +++ b/packages/create-rslib/template-node-dual-js/package.json @@ -0,0 +1,23 @@ +{ + "name": "rslib-node-dual-js", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch" + }, + "devDependencies": { + "@rslib/core": "workspace:*" + } +} diff --git a/packages/create-rslib/template-node-dual-js/rslib.config.mjs b/packages/create-rslib/template-node-dual-js/rslib.config.mjs new file mode 100644 index 000000000..2e440385b --- /dev/null +++ b/packages/create-rslib/template-node-dual-js/rslib.config.mjs @@ -0,0 +1,15 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + format: 'esm', + syntax: 'es2021', + }, + { + format: 'cjs', + syntax: 'es2021', + }, + ], + output: { target: 'node' }, +}); diff --git a/packages/create-rslib/template-example-js/src/index.js b/packages/create-rslib/template-node-dual-js/src/index.js similarity index 100% rename from packages/create-rslib/template-example-js/src/index.js rename to packages/create-rslib/template-node-dual-js/src/index.js diff --git a/packages/create-rslib/template-node-dual-ts/package.json b/packages/create-rslib/template-node-dual-ts/package.json new file mode 100644 index 000000000..dc167f993 --- /dev/null +++ b/packages/create-rslib/template-node-dual-ts/package.json @@ -0,0 +1,26 @@ +{ + "name": "rslib-node-dual-ts", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch" + }, + "devDependencies": { + "@rslib/core": "workspace:*", + "typescript": "^5.6.3" + } +} diff --git a/packages/create-rslib/template-node-dual-ts/rslib.config.ts b/packages/create-rslib/template-node-dual-ts/rslib.config.ts new file mode 100644 index 000000000..f1f926319 --- /dev/null +++ b/packages/create-rslib/template-node-dual-ts/rslib.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + format: 'esm', + syntax: 'es2021', + dts: {}, + }, + { + format: 'cjs', + syntax: 'es2021', + }, + ], + output: { target: 'node' }, +}); diff --git a/packages/create-rslib/template-example-ts/src/index.ts b/packages/create-rslib/template-node-dual-ts/src/index.ts similarity index 100% rename from packages/create-rslib/template-example-ts/src/index.ts rename to packages/create-rslib/template-node-dual-ts/src/index.ts diff --git a/packages/create-rslib/template-example-ts/tsconfig.json b/packages/create-rslib/template-node-dual-ts/tsconfig.json similarity index 100% rename from packages/create-rslib/template-example-ts/tsconfig.json rename to packages/create-rslib/template-node-dual-ts/tsconfig.json diff --git a/packages/create-rslib/template-node-esm-js/package.json b/packages/create-rslib/template-node-esm-js/package.json new file mode 100644 index 000000000..ee41bc11c --- /dev/null +++ b/packages/create-rslib/template-node-esm-js/package.json @@ -0,0 +1,21 @@ +{ + "name": "rslib-node-esm-js", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "import": "./dist/index.js" + } + }, + "module": "./dist/index.js", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch" + }, + "devDependencies": { + "@rslib/core": "workspace:*" + } +} diff --git a/packages/create-rslib/template-node-esm-js/rslib.config.mjs b/packages/create-rslib/template-node-esm-js/rslib.config.mjs new file mode 100644 index 000000000..5b320ba49 --- /dev/null +++ b/packages/create-rslib/template-node-esm-js/rslib.config.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + format: 'esm', + syntax: 'es2021', + }, + ], + output: { target: 'node' }, +}); diff --git a/packages/create-rslib/template-node-esm-js/src/index.js b/packages/create-rslib/template-node-esm-js/src/index.js new file mode 100644 index 000000000..8df150441 --- /dev/null +++ b/packages/create-rslib/template-node-esm-js/src/index.js @@ -0,0 +1,3 @@ +export function example() { + return 'hello world'; +} diff --git a/packages/create-rslib/template-node-esm-ts/package.json b/packages/create-rslib/template-node-esm-ts/package.json new file mode 100644 index 000000000..89f24593b --- /dev/null +++ b/packages/create-rslib/template-node-esm-ts/package.json @@ -0,0 +1,24 @@ +{ + "name": "rslib-node-esm-ts", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch" + }, + "devDependencies": { + "@rslib/core": "workspace:*", + "typescript": "^5.6.3" + } +} diff --git a/packages/create-rslib/template-node-esm-ts/rslib.config.ts b/packages/create-rslib/template-node-esm-ts/rslib.config.ts new file mode 100644 index 000000000..db48f353d --- /dev/null +++ b/packages/create-rslib/template-node-esm-ts/rslib.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + format: 'esm', + syntax: 'es2021', + dts: {}, + }, + ], + output: { target: 'node' }, +}); diff --git a/packages/create-rslib/template-node-esm-ts/src/index.ts b/packages/create-rslib/template-node-esm-ts/src/index.ts new file mode 100644 index 000000000..cfc19c8a6 --- /dev/null +++ b/packages/create-rslib/template-node-esm-ts/src/index.ts @@ -0,0 +1,3 @@ +export function example(): string { + return 'hello world'; +} diff --git a/packages/create-rslib/template-node-esm-ts/tsconfig.json b/packages/create-rslib/template-node-esm-ts/tsconfig.json new file mode 100644 index 000000000..98e777aad --- /dev/null +++ b/packages/create-rslib/template-node-esm-ts/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2021", + "lib": ["DOM", "ES2021"], + "module": "ESNext", + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true, + "allowImportingTsExtensions": true + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d347a13a..ed0fa23bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -272,6 +272,9 @@ importers: specifier: 1.0.7 version: 1.0.7 devDependencies: + '@rslib/core': + specifier: workspace:* + version: link:../core '@rslib/tsconfig': specifier: workspace:* version: link:../../scripts/tsconfig diff --git a/website/docs/en/guide/start/quick-start.mdx b/website/docs/en/guide/start/quick-start.mdx index 228fb52a2..f7f818712 100644 --- a/website/docs/en/guide/start/quick-start.mdx +++ b/website/docs/en/guide/start/quick-start.mdx @@ -38,6 +38,17 @@ import { PackageManagerTabs } from '@theme'; Then follow the prompts to complete the operation. +### Templates + +When creating a project, you can choose from the following templates provided by `create-rslib`: + +| Template | Description | +| ------------ | -------------------------------------------------- | +| node-dual-js | Node.js dual ESM/CJS package | +| node-dual-ts | Node.js dual ESM/CJS package written in TypeScript | +| node-esm-js | Node.js pure ESM package | +| node-esm-ts | Node.js pure ESM package written in TypeScript | + ### Optional Tools `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. From fc01be7ae87239cfdcafe13b6a5c43c1a59176db Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 22 Oct 2024 17:53:13 +0800 Subject: [PATCH 2/4] fix --- packages/create-rslib/src/index.ts | 2 +- packages/create-rslib/test/index.test.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/create-rslib/src/index.ts b/packages/create-rslib/src/index.ts index 3e144517b..c79bccdf0 100644 --- a/packages/create-rslib/src/index.ts +++ b/packages/create-rslib/src/index.ts @@ -49,7 +49,7 @@ function mapESLintTemplate(templateName: string) { create({ root: path.resolve(__dirname, '..'), name: 'rslib', - templates: ['example-js', 'example-ts'], + templates: ['node-dual-js', 'node-dual-ts', 'node-esm-js', 'node-esm-ts'], getTemplateName, mapESLintTemplate, }); diff --git a/packages/create-rslib/test/index.test.ts b/packages/create-rslib/test/index.test.ts index ec6b614c7..e184984eb 100644 --- a/packages/create-rslib/test/index.test.ts +++ b/packages/create-rslib/test/index.test.ts @@ -3,12 +3,20 @@ import { join } from 'node:path'; import { expect, test } from 'vitest'; import { createAndValidate } from './helper'; -test('should create example-js project as expected', async () => { - createAndValidate(__dirname, 'example-js'); +test('should create node-dual-js project as expected', async () => { + createAndValidate(__dirname, 'node-dual-js'); }); -test('should create example-ts project as expected', async () => { - createAndValidate(__dirname, 'example-ts'); +test('should create node-dual-ts project as expected', async () => { + createAndValidate(__dirname, 'node-dual-ts'); +}); + +test('should create node-esm-js project as expected', async () => { + createAndValidate(__dirname, 'node-esm-js'); +}); + +test('should create node-esm-ts project as expected', async () => { + createAndValidate(__dirname, 'node-esm-ts'); }); test('should allow to create project in sub dir', async () => { From 1a7cc944a9179d4458784f3cbe84ddabe01d81c4 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 22 Oct 2024 18:06:35 +0800 Subject: [PATCH 3/4] fix --- packages/create-rslib/src/index.ts | 11 +++++++---- packages/create-rslib/test/index.test.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/create-rslib/src/index.ts b/packages/create-rslib/src/index.ts index c79bccdf0..b6cbfe076 100644 --- a/packages/create-rslib/src/index.ts +++ b/packages/create-rslib/src/index.ts @@ -13,9 +13,12 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); async function getTemplateName({ template }: Argv) { if (typeof template === 'string') { const pair = template.split('-'); - const language = pair[1] ?? 'js'; - const type = pair[0]; - return `${type}-${language}`; + const lang = pair[pair.length - 1]; + if (lang && ['js', 'ts'].includes(lang)) { + return template; + } + // default to js + return `${template}-js`; } const type = checkCancel( @@ -42,7 +45,7 @@ async function getTemplateName({ template }: Argv) { } function mapESLintTemplate(templateName: string) { - const language = templateName.split('-')[1]; + const language = templateName.split('-').pop(); return `vanilla-${language}` as ESLintTemplateName; } diff --git a/packages/create-rslib/test/index.test.ts b/packages/create-rslib/test/index.test.ts index e184984eb..151bfa867 100644 --- a/packages/create-rslib/test/index.test.ts +++ b/packages/create-rslib/test/index.test.ts @@ -20,19 +20,19 @@ test('should create node-esm-ts project as expected', async () => { }); test('should allow to create project in sub dir', async () => { - createAndValidate(__dirname, 'example', { + createAndValidate(__dirname, 'node-esm-js', { name: 'test-temp-dir/rslib-project', }); }); test('should allow to create project in relative dir', async () => { - createAndValidate(__dirname, 'example', { + createAndValidate(__dirname, 'node-esm-js', { name: './test-temp-relative-dir', }); }); test('should create project with eslint as expected', async () => { - const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', { + const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', { name: 'test-temp-eslint', tools: ['eslint'], clean: false, @@ -43,7 +43,7 @@ test('should create project with eslint as expected', async () => { }); test('should create project with prettier as expected', async () => { - const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', { + const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', { name: 'test-temp-prettier', tools: ['prettier'], clean: false, @@ -54,7 +54,7 @@ test('should create project with prettier as expected', async () => { }); test('should create project with eslint and prettier as expected', async () => { - const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', { + const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', { name: 'test-temp-eslint-prettier', tools: ['eslint', 'prettier'], clean: false, @@ -67,7 +67,7 @@ test('should create project with eslint and prettier as expected', async () => { }); test('should create project with biome as expected', async () => { - const { dir, pkgJson, clean } = createAndValidate(__dirname, 'example', { + const { dir, pkgJson, clean } = createAndValidate(__dirname, 'node-esm-js', { name: 'test-temp-eslint', tools: ['biome'], clean: false, From 765fb4119e2fb876b67e29d1bfda1b2bfdc2d223 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 22 Oct 2024 18:49:13 +0800 Subject: [PATCH 4/4] fix: defaults to ts --- packages/create-rslib/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/create-rslib/src/index.ts b/packages/create-rslib/src/index.ts index b6cbfe076..08ee74e96 100644 --- a/packages/create-rslib/src/index.ts +++ b/packages/create-rslib/src/index.ts @@ -17,8 +17,8 @@ async function getTemplateName({ template }: Argv) { if (lang && ['js', 'ts'].includes(lang)) { return template; } - // default to js - return `${template}-js`; + // default to ts + return `${template}-ts`; } const type = checkCancel(