feat: refactor build process to use Bun, removing Rollup configuration

- Implemented `gererateBunConfig` and `buildWithBun` functions for building projects with Bun.
- Added command-line interface using Commander for building projects.
- Removed Rollup-related code and configuration.
- Deleted unused config module.
- Updated TypeScript configuration to extend from a shared config.
- Added .npmrc for authentication tokens.
- Created bun.config.ts for Bun build configuration.
- Added README documentation for usage instructions.
This commit is contained in:
2025-12-23 12:25:22 +08:00
parent c622010ee2
commit d6aae58ca0
9 changed files with 200 additions and 1630 deletions

2
.npmrc Normal file
View File

@@ -0,0 +1,2 @@
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
//registry.npmjs.org/:_authToken=${NPM_TOKEN}

6
bin/code.js Normal file → Executable file
View File

@@ -1,3 +1,5 @@
#!/usr/bin/env node #!/usr/bin/env bun
import { parse } from '../dist/app.js';
console.log('Hello World'); const args = process.argv.slice(2);
const result = parse(args);

3
bun.config.ts Normal file
View File

@@ -0,0 +1,3 @@
import { buildWithBun } from './src/index.ts'
await buildWithBun({ meta: import.meta, dts: true })

View File

@@ -1,33 +1,36 @@
{ {
"name": "@kevisual/code-builder", "name": "@kevisual/code-builder",
"version": "0.0.1", "version": "0.0.2",
"description": "", "description": "",
"main": "index.js", "main": "src/index.ts",
"bin": {
"code-builder": "./bin/code.js"
},
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "start": "bun run dev",
"build": "rollup -c" "build": "bun ./bun.config.ts",
"dev": " bun run build --watch"
}, },
"keywords": [], "keywords": [],
"files": [ "files": [
"dist", "dist",
"bin", "bin",
"tsconfig.json" "src"
], ],
"publishConfig": {
"access": "public"
},
"author": "abearxiong <xiongxiao@xiongxiao.me>", "author": "abearxiong <xiongxiao@xiongxiao.me>",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@kevisual/router": "0.0.7", "@kevisual/use-config": "^1.0.21",
"@kevisual/use-config": "^1.0.8", "nanoid": "^5.1.6"
"nanoid": "^5.1.2"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-commonjs": "^28.0.2", "@kevisual/types": "^0.0.10",
"@rollup/plugin-json": "^6.1.0", "commander": "^14.0.2",
"@rollup/plugin-node-resolve": "^16.0.0", "@types/bun": "^1.3.5",
"@rollup/plugin-typescript": "^12.1.2", "@types/node": "^25.0.3"
"@types/node": "^22.13.5",
"rollup": "^4.34.8",
"typescript": "^5.7.3"
} }
} }

1629
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

22
readme.md Normal file
View File

@@ -0,0 +1,22 @@
# 对bun的build命令进行封装
## npx
使用方式
```bash
npx @kevisual/code-builder build
```
## global安装
```bash
npm install -g @kevisual/code-builder
code-builder build
```
## 作为库使用
```ts
import { buildWithBun } from '@kevisual/code-builder'
await buildWithBun({ meta: import.meta, dts: true })
```

View File

@@ -1,23 +1,78 @@
// rollup.config.js import { resolvePath } from '@kevisual/use-config';
import { execSync } from 'node:child_process';
import typescript from '@rollup/plugin-typescript'; import { BuildConfig } from 'bun';
import resolve from '@rollup/plugin-node-resolve'; type EntryOptions = {
import commonjs from '@rollup/plugin-commonjs'; entry?: string;
import json from '@rollup/plugin-json'; outDir?: string;
naming?: string;
import { rollup } from 'rollup'; external?: string[];
target?: 'node' | 'browser';
export const build = async () => { dts?: boolean,
const bundle = await rollup({ meta?: { url: string };
input: 'src/index.ts',
output: {
file: 'dist/app.mjs',
format: 'es',
},
watch: {
include: 'src/**',
},
// @ts-ignore
plugins: [typescript(), resolve(), commonjs(), json()],
});
}; };
export const gererateBunConfig = (options: EntryOptions = {}): { config: BuildConfig, dtsCommand?: string } => {
const {
entry = 'src/index.ts',
outDir = './dist',
naming = 'app',
external = [],
target = 'node',
dts = false,
meta
} = options;
const entrypoint = resolvePath(entry, { meta });
const outputDir = resolvePath(outDir, { meta });
return {
config: {
target: target,
format: 'esm',
entrypoints: [entrypoint],
outdir: outputDir,
naming: {
entry: `${naming}.js`,
},
external,
},
dtsCommand: dts ? `dts -i ${entry} -o ${naming}.d.ts` : undefined
}
}
export const buildWithBun = async (options: EntryOptions = {}) => {
const { config, dtsCommand } = gererateBunConfig(options);
const meta = options.meta;
await Bun.build(config);
if (dtsCommand) {
execSync(dtsCommand, {
stdio: 'inherit',
cwd: resolvePath('./', { meta })
});
}
}
export const parse = async () => {
const { Command } = await import('commander');
const program = new Command();
program
.name('code-builder')
.description('使用 Bun 的代码构建工具')
.version('0.0.2');
const build = new Command('build').description('使用 Bun 构建项目');
build
.option('-e, --entry <path>', '入口文件', 'src/index.ts')
.option('-o, --outDir <path>', '输出目录', './dist')
.option('-n, --naming <name>', '输出文件命名', 'app')
.option('-t, --target <target>', '构建目标 (node 或 browser)', 'node')
.option('--dts', '生成 TypeScript 声明文件', false).action(async (options) => {
await buildWithBun({
entry: options.entry,
outDir: options.outDir,
naming: options.naming,
target: options.target,
dts: options.dts,
});
});
program.addCommand(build);
program.parse(process.argv);
}

View File

@@ -1,5 +0,0 @@
import { resolve } from 'path';
export const runPath = () => {
return resolve(process.cwd());
};

View File

@@ -1,33 +1,24 @@
{ {
"extends": "@kevisual/types/json/backend.json",
"compilerOptions": { "compilerOptions": {
"module": "nodenext", "module": "NodeNext",
"target": "esnext", "target": "esnext",
"noImplicitAny": false, "baseUrl": ".",
"outDir": "./dist",
"sourceMap": false,
"allowJs": true,
"newLine": "LF",
"baseUrl": "./",
"typeRoots": [ "typeRoots": [
"node_modules/@types", "./node_modules/@types",
// "node_modules/@kevisual/types" "./node_modules/@kevisual/types/index.d.ts"
], ],
"declaration": true,
"noEmit": false,
"allowImportingTsExtensions": true,
"emitDeclarationOnly": true,
"moduleResolution": "NodeNext",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"paths": { "paths": {
"@/*": [ "@/*": [
"src/*" "src/*"
],
"@agent/*": [
"agent/*"
] ]
} },
}, },
"include": [ "include": [
"src/**/*.ts", "src/**/*",
"agent/**/*",
], ],
"exclude": [],
} }