Visit us at www.nasriya.net.
PostBuild is a utility pacakge for TypeScript that runs useful tasks after transpiling TypeScript into ESM and CJS JavaScript file.
Made with ❤️ in Palestine 🇵🇸
Important
🌟 Support Our Open-Source Development! 🌟 We need your support to keep our projects going! If you find our > work valuable, please consider contributing. Your support helps us > continue to develop and maintain these tools.
Every contribution, big or small, makes a difference. Thank you for > your generosity and support!
Install the pacakge as a dev. dependency:
npm i --save-dev @nasriya/postbuild
The postbuild.configs.json
is the file where all your configurations reside, and is needed to perform the tasks or the build process will fail.
If you don't have a file, just run the following command and a file will be generated with recommended configurations:
npm run postbuild-init
The above comand will generate a file with all the features set to their recommended values. This table below explains them in details.
Property | Description | Posible values | Default value |
---|---|---|---|
esmDir |
The directory of the generated ESM folder. |
auto or the directory |
auto |
cjsDir |
The directory of the generated CJS folder. |
auto or the directory |
auto |
verbose |
An option to enable logging extra details . | true or false |
true |
addExtensions |
Appending .js to all import statements. |
true or false |
true |
copyFiles |
An options object to copy assets to the dist folder after transpiling. |
object or undefined |
Notice below |
copyFiles.from |
The directory where you want to copy the assets to. | directory | src |
copyFiles.exclude |
An array of file extensions to exclude. | string[] |
['.ts'] |
aliases |
Define aliases to your imports | Record<string, string> |
Nothing |
The default configurations works well if your project is structured like this:
├── dist/
│ ├── @types
│ ├── cjs
│ └── esm
├── src
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ └── index.ts
├── package.json
└── README.md
The best way to use this package is to integrate it with your build process by appending the postbuild
worker to the end of the build
command:
// package.json
{
"scripts": {
"build": "npm run build:esm && npm run build:cjs && postbuild",
"build:esm": "tsc --project tsconfig.esm.json",
"build:cjs": "tsc --project tsconfig.cjs.json",
}
}
In postbuild.config.json
, you can add your aliases as such:
{
"aliases": {
"my-module": "/modules/my-module",
"@elements/*": "/elements/"
}
}
All __dirname
matches in ESM
will be replaced with import.meta.dirname
, for example:
// TypeScript
const dirname: string = __dirname;
Will be compiled to:
// CommonJS (CJS)
const dirname = __dirname;
// ECMAScript Modules (ESM)
const dirname = import.meta.dirname;
Please read the license from here.