prebundle-esm
v2.3.2
Published
Prebundle Node.js dependencies, output a single js file, a package.json file and the dts files.
Readme
Prebundle-esm
Prebundle Node.js dependencies, output a single js file, a package.json file and the dts files.
Based on ncc, esbuild and rollup-plugin-dts.
Motivation
prebundle-esm vs prebundle:
- Use
esbuildto build esm package.
Prebundle is used to:
- Reduce dependencies of core packages, install faster.
- Improve stability by locking the sub-dependency version .
- Fix peer dependency warning of some packages.
Command
Run following command to prebundle all dependencies:
npx prebundle-esmRun following command to prebundle single dependencies:
npx prebundle-esm <pkgName>
# For example, prebundle commander
npx prebundle-esm commanderDependency Config
Supported dependency config:
esm
set esbuildFormat to esm to build esm package.
// prebundle.config.mjs
/** @type {import('prebundle-esm').Config} */
export default {
dependencies: [
{
name: 'foo',
target: 'es2015',
},
{
name: '@aws-sdk/client-s3',
esbuildPlatform: 'node',
// re-export all `modules.exports`.
esbuildExportCjsNamedExport: true,
esbuildExportStarAsDefault: false,
esbuildFormat: 'esm',
},
],
};But when your package is mixing cjs and esm, you'd better choose esbuildFormat: 'cjs', please see https://dev.to/marcogrcr/nodejs-and-esbuild-beware-of-mixing-cjs-and-esm-493n for details.
externals
Externals to leave as requires of the build.
// prebundle.config.mjs
/** @type {import('prebundle-esm').Config} */
export default {
dependencies: [
{
name: 'foo',
externals: {
webpack: '../webpack',
},
},
],
};You can also configure externals for all packages like this:
// prebundle.config.mjs
export default {
externals: {
webpack: '../webpack',
},
dependencies: [{ name: 'foo' }, { name: 'foo' }],
};dtsExternals
Externals for dts.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
dtsExternals: ['webpack'],
},
],
};minify
Whether to minify the code, default false.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
minify: false,
},
],
};packageJsonField
Copy extra fields from original package.json to target package.json.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
packageJsonField: ['options'],
},
],
};Following fields will be copied by default:
nameauthorversionfundinglicensetypestypingtypings
beforeBundle
Callback before bundle.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
beforeBundle(task) {
console.log('do something');
},
},
],
};emitFiles
Emit extra entry files to map imports.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
emitFiles: [
{
path: 'foo.js',
content: `module.exports = require('./').foo;`,
},
],
},
],
};ignoreDts
Ignore the original .d.ts declaration file, then generate a fake .d.ts file.
This can be used to reduce file size for the packages that do not require type definitions, such as webpack plugin.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
ignoreDts: true,
},
],
};target
Target ECMAScript version, default es2021.
// prebundle.config.mjs
export default {
dependencies: [
{
name: 'foo',
target: 'es2015',
},
],
};prettier
Whether to prettier the code and strip comments, default false.
// prebundle.config.mjs
export default {
prettier: true,
};