A plugin for esbuild
to allow bundle-time asset generation. This can be useful to work efficiently with established conventions and reduce duplication and boilerplate code.
It follows pretty much the parcel-plugin-codegen implementation.
Install the plugin:
npm i esbuild-codegen-plugin --save-dev
Now in your esbuild
configuration file you can do:
const { build } = require('esbuild');
const { codegenPlugin } = require('esbuild-codegen-plugin');
build({
// ...
plugins: [codegenPlugin()],
});
At this point you can reference a .codegen
file in any file, e.g., in a TypeScript asset
import generatedModule from './my.codegen';
Create a .codegen
file with the structure:
module.exports = function() {
return `export default function() {}`;
};
You can also use promises in your code generation. As an example, if your .codegen
file looks similar to this:
module.exports = function() {
return callSomeApi().then(result => `export default function() { return ${JSON.stringify(result)}; }`);
};
The new asset will be created asynchronously. Furthermore, you can obviously use require
or import
directly in your generated code. Since the asset will be run through esbuild
like any other asset, you can use this mechanism to include files from a directory without referencing them explicitly:
module.exports = function() {
return `
import { lazy } from 'react';
export default lazy(() => import(${JSON.stringify(filePath)}));
`;
};
This plugin is released using the MIT license. For more information see the LICENSE file.