Skip to content

vite-plugin-view

npm package

Dynamically render pages using custom template engines instead of the static .html entry file.

NPM versionNPM DownloadsNode version


Supported Template Engines

The plugin supports 59 template engines (sorted alphabetically):

  • arc-templates
  • atpl
  • bracket
  • dot
  • dust
  • eco
  • ejs
  • ect
  • haml
  • haml-coffee
  • hamlet
  • handlebars
  • hogan
  • htmling
  • jade
  • jazz
  • jqtpl
  • just
  • liquid
  • liquor
  • lodash
  • marko
  • mote
  • mustache
  • nunjucks
  • plates
  • pug
  • qejs
  • ractive
  • razor
  • react
  • slm
  • squirrelly
  • swig
  • teacup
  • templayed
  • toffee
  • twig
  • underscore
  • vash
  • velocityjs
  • walrus
  • whiskers

Installation Steps

1. Install Plugin & Template Engine

bash
npm add vite-plugin-view <template-engine-name>
bash
pnpm add vite-plugin-view <template-engine-name>
bash
yarn add vite-plugin-view <template-engine-name>

Replace <template-engine-name> with any engine from the list above (e.g., pug or ejs).


Configuration Example

Configure the plugin in vite.config.js:

javascript
import { defineConfig } from 'vite';
import { view } from 'vite-plugin-view';

export default defineConfig({
  plugins: [
    view({
      engine: 'pug',  // Set the template engine to use (e.g., 'pug', 'ejs', etc.)
    })
  ]
});

Advanced Features

To add global variables/filters to template engines, refer to: 👉 Template Engine Instances


Multi-page (MPA) example

Starting with Vite 8, you can configure multi-page applications using the object form of entry. Below is an example using the EJS template engine with two pages:

vite.config.js:

javascript
import { defineConfig } from 'vite';
import { view } from 'vite-plugin-view';

export default defineConfig({
  plugins: [
    view({
      engine: 'ejs',
      entry: {
        index: 'index.ejs',
        home: 'home.ejs'
      }
    })
  ],
  build: {
    // MPA + IIFE output requires code splitting, otherwise Rolldown throws INVALID_OPTION
    rolldownOptions: {
      output: {
        codeSplitting: true
      }
    }
  }
});

index.ejs (index page template):

html
<!DOCTYPE html>
<html>
<head>
  <title>Index</title>
</head>
<body>
  <h1>Welcome to the Index Page</h1>
  <a href="/home.html">Go to Home Page</a>
  <script type="module" src="/src/main.ts"></script>
</body>
</html>

home.ejs (home page template):

html
<!DOCTYPE html>
<html>
<head>
  <title>Home</title>
</head>
<body>
  <h1>Home Page</h1>
  <a href="/index.html">Back to Index</a>
  <script type="module" src="/src/main.ts"></script>
</body>
</html>

After building, two separate HTML files will be generated: dist/index.html and dist/home.html.

Note: When using MPA with IIFE output format, you must set build.rolldownOptions.output.codeSplitting: true, otherwise Rolldown (Vite 8's bundler) throws an INVALID_OPTION error.


Important Notes

  1. Ensure the selected template engine dependency is installed (e.g., npm install pug).
  2. Place template files in Vite-accessible paths (default entry: index.${extension}).
  3. Some engines (e.g., pug) may have specific requirements for beautification (pretty option).
  4. Always test configurations with your chosen template engine.