Skip to content

SSR ​

vite-plugin-public-typescript supports two output modes:

  1. Output to memory
  2. Output to file

By default, vite-plugin-public-typescript outputs compiled code to memory and injects scripts into HTML using the injectScripts plugin.

For server-side rendering, there is usually no HTML file, so we can choose one of the following methods to inject scripts:

Memory Mode ​

Since Vite server-side rendering does not have a transformIndexHtml hook, the injectScripts plugin cannot be used to inject scripts.

However, the plugin provides an injectScriptsToHtml method to dynamically inject scripts into an HTML string.

ts
// server.js
import { injectScriptsToHtml } from 'vite-plugin-public-typescript'

const html = injectScriptsToHtml('Your Html Content', (manifest) => {
  return [
    {
      attrs: {
        src: manifest.hello,
      },
      injectTo: 'body',
    },
  ]
})

For detailed usage of injectScriptsToHtml, refer to the documentation.

File Mode ​

We recommend using memory mode, but if it does not meet your needs, you can use file mode.

Configure the publicTypescript plugin in vite.config.ts to output compiled code to a file.

ts
// vite.config.ts
import { defineConfig } from 'vite'
import { publicTypescript } from 'vite-plugin-public-typescript'

export default defineConfig({
  plugins: [
    publicTypescript({
      destination: 'file',
      // Output to the `out` directory
      outputDir: 'out',
    }),
  ]
})

Start the project, and you will see the compiled files output to the out directory.

How do we use the compiled files?

vite-plugin-public-typescript stores compiled file information in manifest.json. We can get the compiled file information through a virtual file or by directly importing manifest.json.

Virtual File ​

First, configure TypeScript type declarations.

json
{
  "compilerOptions": {   
    "types": ["vite-plugin-public-typescript/virtual"]
  }
}

Then import it in the project.

ts
import { manifest } from 'virtual:public-typescript-manifest'

console.log(manifest.hello) // Outputs the compiled file path

Direct Import ​

Import the manifest.json file from the cacheDir.

ts
import manifest from 'node_modules/.vite-plugin-public-typescript/manifest.json'

console.log(manifest.hello) // Outputs the compiled file path

If you change the cacheDir, adjust the path accordingly.

ts
// vite.config.ts
import { defineConfig } from 'vite'
import { publicTypescript } from 'vite-plugin-public-typescript'

export default defineConfig({
  plugins: [
    publicTypescript({
      destination: 'file',
      outputDir: 'out',
      cacheDir: 'public-typescript', 
    }),
  ]
})
ts
import manifest from './public-typescript/manifest.json'

console.log(manifest.hello) // Outputs the compiled file path