if-tsb is the bundler for TypeScript.
npm i -g if-tsb # install
if-tsb # build
if-tsb . # build with specific path
if-tsb ./index.ts # build with specific entry
if-tsb ./tsconfig.json # build with specific tsconfig.json
if-tsb -o ./output.js # build with specific output
if-tsb -w # build with watch
if-tab --clear-cache # clear cache
- define a entry
{
"entry": "./entry.ts", // output: "./entry.bundle.js"
"compilerOptions": {
/* ... */
}
}
- define multiple entries
{
"entry": ["./entry.ts", "./entry2.ts"], // output: "./entry.bundle.js", "./entry2.bundle.js"
"compilerOptions": {
/* ... */
}
}
- define entries with specific output
{
"entry": {
"./entry.ts": "./bundled.output.js",
"./entry2.ts": "./bundled.output2.js"
},
"compilerOptions": {
/* ... */
}
}
- define entries with specific output alternate
{
"entry": ["./entry.ts", "./entry2.ts"],
"output": "./bundled.[name].js", // output: "./bundled.entry.js"
"compilerOptions": {
/* ... */
}
}
- all default options
{
"entry": "./index.ts",
"output": "[dirname]/[name].bundled.js",
"import": ["path/to/other/tsconfig/directory"],
"bundlerOptions": {
"globalModuleVarName": "__tsb",
"checkCircularDependency": false,
"suppressDynamicImportErrors": false,
"suppressModuleNotFoundErrors": false,
"cleanConsole": false, // clean console before repeated by watch
"faster": false, // skip external parsing and reporting, cannot emit some d.ts and will not replace enum const
"watchWaiting": 30, // bundling after ${watchWaiting}ms from file modifying
"verbose": false,
"bundleExternals": false, // boolean|string[], bundle files in node_modules
"browser": false, // boolean|"./path/to/web/root"
"externals": [], // files that do not bundle
"module": "none", // "commonjs"|"none"|"private"|"self"|"window"|"this"|"var (varname)"|"let (varname)"|"const (varname)"
"preimport": [], // modules for pre-import. it replaces require('name') to __tsb.name,
"noSourceMapWorker": false, // do not use the worker for the sourcemap generating.
"beginWrap": "", // begining of the bundled file. it does not contain any lines
"endWrap": "" // ending of the bundled file. it does not contain any lines
},
"compilerOptions": {
/* ... */
}
}
- define entries with bundler options
{
"entry": {
"./entry.ts": {
"output": "./bundled.output.js",
/** "bundlerOptions": { ... }, */
/** "compilerOptions": { ... } */
},
"./entry2.ts": {
"output": "./bundled.output2.js",
/** "bundlerOptions": { ... }, */
/** "compilerOptions": { ... } */
}
},
"bundlerOptions": {
/* ... */
},
"compilerOptions": {
/* ... */
}
}
- Sharing codes
{
"entry": "./index.ts",
"share": {
"./lib.ts":"share",
"./libdir/**/*.ts":"share2",
"globalmodule": "share3"
},
"bundlerOptions": {
/* ...bundlerOptions */
},
"compilerOptions": {
/* ... */
}
}
import { bundle, bundleWatch } = require('if-tsb');
bundle(['./entry.ts'] /*, './output.js' */); // build
// bundle.watch(['./entry.ts']); // watch