mirror of
https://github.com/iconify/iconify.git
synced 2024-12-14 14:38:25 +00:00
.. | ||
src | ||
tests | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.js | ||
.gitignore | ||
.npmignore | ||
.prettierrc | ||
jest.config.js | ||
license.txt | ||
package-lock.json | ||
package.json | ||
readme.md | ||
tsconfig-base.json | ||
tsconfig.json |
ES Builder
This is a library for transpiling TypeScript files.
It is not a bundler! It builds libraries that export multiple single files, not bundles.
What does it do?
- Creates both ES and CommonJS modules in target directory. CommonJS files use '.js' extension, ES files use '.mjs' extension.
- Creates TypeScript definition files for each file.
- Rewrites imports paths in ES modules.
- Updates exports field in package.json
- Tests ES imports
Why is it needed?
- ES modules should have full import paths, including extension, but TypeScript compiler cannot rewrite imports, so it cannot change target extension, so
tsc
cannot be reliably used to create ES modules. - Using other tools, such as
esbuild
requires custom plugin. This package is used by multiple packages, so it makes sense to split code into a separate package to make it easily reusable. - Currently
tsup
is the only viable alternative, but it is meant to be used as bundler. Without bundle option it currently fails to generate TypeScript definition files. - Reusable functions for updating package.json and for testing ES imports.
Documentation
Requirements for using build process:
- Create
tsconfig.json
that creates CommonJS modules, saves declarations, hasimportsNotUsedAsValues
set toerror
. - Add script to
package.json
for building source code, such as"build:source": "tsc -b",
. If you have multipe
To build packages, create build.js
in your package:
/* eslint-disable */
const { buildFiles } = require('@iconify/library-builder');
buildFiles({
root: __dirname,
source: './src',
target: './lib',
})
.then(() => {
console.log('Done');
})
.catch((err) => {
console.error(err);
process.exit(1);
});
Source and target paths must be relative to root directory and start with ./
.
License
The library is released with MIT license.
© 2021 Vjacheslav Trushkin / Iconify OÜ