UNPKG

@marijn/buildtool

Version:

Tool for building TypeScript packages

90 lines (62 loc) 3.27 kB
# @marijn/buildtool Utility to build TypeScript projects that conform to a given set of conventions quickly and cleanly. Exports functions that wrap the TypeScript compiler and Rollup to build or watch one or more projects in one go, performing a single shared build (so that files from different projects aren't compiled twice). Assumes your projects are set up like this: - TypeScript files in an `src` directory, will be compiled to `dist/index.js` (ES module), `dist/index.cjs` (CommonJS), and `dist/index.d.ts` (TypeScript) files. - Tests, if any, under `test`, will be compiled in-place to `.js` files, which are ES modules. - Doc comments prefixed with triple slash `///` syntax will be converted to `/**` JSDoc comments in the output, so that TypeScript tooling picks them up. ## API * **`build`**`(main: string | readonly string[], options?: BuildOptions = {}) → Promise`\ Build the package with main entry point `main`, or the set of packages with the given entry point files. Output files will be written to the `dist` directory one level up from the entry file. Any TypeScript files in a `test` directory one level up from main files will be built in-place. * **`watch`**`(mains: readonly string[], extra?: readonly string[] = [], options?: BuildOptions = {})`\ Build the given packages, along with an optional set of extra files, and keep rebuilding them every time an input file changes. ### interface BuildOptions Options passed to `build` or `watch`. * **`sourceMap`**`?: boolean`\ Generate sourcemap when generating bundle. defaults to false * **`tsOptions`**`?: any`\ Additional compiler options to pass to TypeScript. * **`bundleName`**`?: string`\ Base filename to use for the output bundle and declaration files. Defaults to `"index"`. * **`expandLink`**`?: fn(anchor: string) → string | null`\ When given, this is used to convert anchor links in the `///` comments to full URLs. * **`expandRootLink`**`?: string`\ When given, prefix this to links in the comments that start with a `/`. * **`outputPlugin`**`?: fn(root: string) → Plugin | Promise`\ Adds a Rollup output plugin to use. * **`cjsOutputPlugin`**`?: fn(root: string) → Plugin`\ Adds an output plugin to use only for CommonJS bundles. * **`pureTopCalls`**`?: boolean`\ When set to true, add a `/*@__PURE__*/` comment before top level function calls, so that tree shakers will consider them pure. Note that this can break your code if it makes top-level function calls that have side effects. * **`onRebuildStart`**`?: fn(packages: readonly string[])`\ Function to call when starting a rebuild via `watch`, passing the root directories of the packages that are being built. The default is to just log the base names of the directories. * **`onRebuildEnd`**`?: fn(packages: readonly string[])`\ Function to call when finishing a rebuild. ## Community This is open source software released under an [MIT license](https://github.com/marijnh/buildtool/blob/master/LICENSE). Development happens on [GitHub](https://github.com/marijnh/buildtool/). Use the [bug tracker](https://github.com/marijnh/buildtool/issues) to report problems.