@yume-chan/ts-package-builder v1.0.0
TypeScript NPM Package Builder (for myself)
Installation
(This package is not yet published to NPM registry, so presumably)
$ npm install --dev @yume-chan/ts-package-builder typescriptTypeScript is a peer dependency that must be installed separately (so you can use any version you want).
$ npm install tslibThe default configuration has "importHelpers": true, so tslib is required (and it is a production dependency, not dev dependency).
Config
A tsconfig.json file at package root is required for both this builder and editors.
{
// Extends default configurations.
"extends": "./node_modules/@yume-chan/ts-package-builder/tsconfig.base.json",
// (Optional) Add override configurations.
"compilerOptions": {
// All TypeScript configurations are allowed.
"target": "ES2016",
// Add extra ambient types.
// Don't forget to include "jest" unless you don't write unit tests.
// The default is `[ "jest" ]`
"types": [
"w3c-web-usb",
"jest",
"node"
]
},
// (Optional) Specify types that's only used in tests.
// They will be excluded in ESModule build,
// to make sure library code doesn't accidentally use them.
// (for example, a browser targeted libraries should not use types from `@types/node`)
"testTypes": [
"jest",
"node"
],
// (Optional) Add project references to improve editing experience.
// However, because the builder is intended to be used with some monorepo manager
// (lerna, yarn workspace, rush, etc.), and they all have good built-in support
// for building all packages following dependency graph, it **does not** use
// project references when building.
"references": [
{
"path": "../dependency-a/tsconfig.json"
},
{
"path": "../dependency-b/tsconfig.json"
}
]
}Building
$ npx build-ts-packageOr add a script to package.json
{
"scripts": {
"build": "build-ts-package",
},
}The builder compiles for both CommonJS and ESModule, also generates source maps, TypeScript declarations, and declaration maps.
| Module | Output Directory | Excluded Files | Excluded Types |
|---|---|---|---|
| CommonJS | cjs | - | - |
| ESModule | esm | *.spec.ts | @types/jest |
| Declaration (d.ts) | dts | *.spec.ts | @types/jest |
Example package.json:
{
"main": "cjs/index.js",
"module": "esm/index.js",
"types": "dts/index.d.ts",
}Unit test with Jest
Test file convention: put .spec.ts files inside src, alongside the source file that will be tested.
Like this:
- src
- index.ts
- index.spec.ts
The .spec.ts files will be compiled to CommonJS for Jest (so no ts-jest required).
Use the following jest.config.js file to find them:
module.exports = {
testMatch: ['<rootDir>/cjs/**/*.spec.js'],
};Publishing
Because .spec.ts files have been compiled to CommonJS, you can exclude them using .npmignore:
**/*.spec.ts
**/*.spec.js
**/*.spec.js.map4 years ago