UNPKG

vite-plugin-codegen

Version:

A plugin for Vite (v4 and higher) to generate useful modules at bundle-time.

68 lines (47 loc) 2.08 kB
# `vite-plugin-codegen` [![npm](https://img.shields.io/npm/v/vite-plugin-codegen.svg)](https://www.npmjs.com/package/vite-plugin-codegen) [![GitHub tag](https://img.shields.io/github/tag/FlorianRappl/codegen-js.svg)](https://github.com/FlorianRappl/codegen-js/releases) [![GitHub issues](https://img.shields.io/github/issues/FlorianRappl/codegen-js.svg)](https://github.com/FlorianRappl/codegen-js/issues) A plugin for `vite` 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](https://www.npmjs.com/package/parcel-plugin-codegen) implementation. ## Usage Install the plugin: ```sh npm i vite-plugin-codegen --save-dev ``` Now in your `vite` configuration file you can do: ```js import codegen from 'vite-plugin-codegen'; export default { // ... plugins: [codegen()], }; ``` At this point you can reference a `.codegen` file in any file, e.g., in a TypeScript asset ```js import generatedModule from './my.codegen'; ``` Create a `.codegen` file with the structure: ```js module.exports = function() { return `export default function() {}`; }; ``` ### Async Generation You can also use promises in your code generation. As an example, if your `.codegen` file looks similar to this: ```js 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 `vite` like any other asset, you can use this mechanism to include files from a directory without referencing them explicitly: ```js module.exports = function() { return ` import { lazy } from 'react'; export default lazy(() => import(${JSON.stringify(filePath)})); `; }; ``` ## License This plugin is released using the MIT license. For more information see the [LICENSE file](./LICENSE).