Inspired by Vite's Not Bundle, building ts for use in Node.js.
npm install notbundle

- 🚀 High-performance (Based on swc)
- ⚡️ Support Plugin (Like Vite's plugin)
- 🌱 Really simple (Few APIs)
``sh`
npm i notbundle
`js
import {
type Configuration,
build,
watch,
} from 'notbundle'
const config: Configuration = {
include: ['src'],
output: 'dist',
}
build(config)
// or
watch(config)
`
`ts
import {
type Plugin,
type Configuration,
type ResolvedConfig,
resolveConfig,
type BuildResult,
build,
type FSWatcher ,
watch,
// For custom logger
colours,
// Convert path to POSIX
normalizePath,
} from 'notbundle'
`
###### Configuration
`tsdirectory
export interface Configuration {
/* @default process.cwd() /
root?: string
/**
* | filename | globroot
*
* Must be a relative path, which will be calculated based on the . include
* If it is an absolute path, it can only be a subpath of root.
* Otherwise it will cause the output file path to be calculated incorrectly.
*/
include: string[]
/**
* Output Directory.
* If not set, the build result will be returned instead of being written to the file.
*/
output?: string
/* Like Vite's plugin /
plugins?: {
name: string
configResolved?: (config: ResolvedConfig) => void | Promise
/* Triggered by file changes. You can emit some files in this hooks. /extensions
onwatch?: (envet: 'add' | 'change' | 'addDir' | 'unlink' | 'unlinkDir', path: string) => void
/* Triggered by changes in files in include /transform()
transform?: (args: {
/* Raw filename /
filename: string
code: string
/* Skip subsequent transform hooks /
done: () => void
}) => string | null | void | import('@swc/core').Output | Promise
/* Triggered when ends or a file in extensions is removed /logger
ondone?: (args: {
filename: string
code: string
map?: string
destname?: string
}) => void
}[],
/* Custom log. If is passed, all logs will be input this option /transform()
logger?: {
[type in 'error' | 'info' | 'success' | 'warn' | 'log']?: (...message: string[]) => void
},
/* Options of swc /chokidar.watch()
transformOptions?: import('@swc/core').Options
/* Options of /`
watch?: import('chokidar').WatchOptions
}
###### ResolvedConfig
`tstransform()
export interface ResolvedConfig {
/* Absolute path /
root: string
/* Relative path /
include: string[]
/* Absolute path /
output?: string
plugins: NonNullable
logger: Required
/* Options of swc /
transformOptions: import('@swc/core').Options
config: Configuration
/* @default ['.ts', '.tsx', '.js', '.jsx'] /
extensions: string[]
/* Internal functions (🚨 Experimental) /
experimental: {
/* Only files of type config.extensions are included /
include2files: (config: ResolvedConfig, include?: string[]) => string[]
include2globs: (config: ResolvedConfig, include?: string[]) => string[]
/* If include contains only one item, it will remove 1 level of dir 🤔 /
input2output: (config: ResolvedConfig, filename: string) => string | undefined
}
}
``