A plugin for Parcel to allow bundle-time asset generation. This can be useful to work efficiently with established conventions and reduce duplication and boilerplate code.
Just install the plugin. In any file reference a .codegen
file, e.g., in a TypeScript asset
const generatedModule = require('./my.codegen');
Create a .codegen
file with the structure:
module.exports = function() {
return `module.exports = {}`;
};
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 => `module.exports = ${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 Parcel like any other asset, you can use this mechanism to include files from a directory without referencing them explicitly:
module.exports = function() {
return `
const { lazy } = require('react');
module.exports = lazy(() => import(${JSON.stringify(filePath)}));
`;
};
By default, the type of the generated asset will be a JS module. However, you could also generate, e.g., an HTML file:
module.exports = function() {
return `<!doctype html><h1>Hi Mum!</h1>`;
};
module.exports.type = 'html';
Make sure that the type you return is understood by Parcel. It will be further processed (as such you could also generate, e.g., ts
assets).
Alternatively, you can return an object using the following structure:
module.exports = function() {
return {
value: `<!doctype html><h1>Hi Mum!</h1>`,
type: 'html',
};
};
The latter is especially handy when the type
is not fixed or will be determined via an async operation.
This plugin is released using the MIT license. For more information see the LICENSE file.