diff --git a/README-en.md b/README-en.md new file mode 100644 index 0000000..980c4b8 --- /dev/null +++ b/README-en.md @@ -0,0 +1,170 @@ + +

+ + Vite logo + + + Typescript logo + +

+
+

+ npm package + node compatibility +

+ +# vite-plugin-public-typescript + +**English** | [中文](./README.md) + +> A vite plugin inject ts script into html + +**Compile typescript files in the specified directory then inject them into html** + +## Online Demo +[Demo](https://hemengke1997.github.io/vite-plugin-public-typescript/) + +## Why + +- Suppose you want to execute some scripts before the page render, what should you do? +- Suppose you don't want to inject `script` code into `index.html` in a hard-coded way, what should you do? +- Suppose you want third-party scripts to have hash cache, what should you do? +- ... + +**`vite-plugin-public-typescript` is born to solve these problems elegantly** + +## Install + +```bash +pnpm add vite-plugin-public-typescript -D +``` + +## Scenes + +- Independent third-party scripts, such as `sentry`, `google analytics`, `baidu statistics`, etc. +- Scripts that you want to execute before the page is fully loaded, such as [`lib-flexible`](https://github.com/amfe/lib-flexible), etc. +- Initialize global functions +- ... + +## Features + +- Output js files with `hash`, no need to worry about cache +- Default esbuild compilation, blazo fast! +- Support babel compilation, no need to worry about browser compatibility +- Support vite environment variables +- Support vite HMR +- Support different output modes (memory mode and file mode) +- Support CSR and SSR + +## Options + +| Option | Type | Default | Description | +| ---------------- | -------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `inputDir` | `string` | `public-typescript` | The directory where the `typescript` is stored | +| `outputDir` | `string` | `public-typescript` | The directory where the `javascript` is stored | +| `manifestName` | `string` | `manifest` | The name of the `manifest` file | +| `hash` | `boolean` | `true` | Whether the compiled `js` generates `hash` | +| `esbuildOptions` | `BuildOptions` | `{}` | esbuild build options | +| `sideEffects` | `boolean` | `true` | Whether to compile third-party libraries | +| `destination` | `string` | `memory` | Output mode: memory mode \| file mode | +| `cacheDir` | `string` | `node_modules/.vite-plugin-public-typescript` | The directory where the `manifest` cache is stored | +| `base` | `string` | vite config `base` | Resource base url | +| `publicDir` | `string` | vite config `publicDir` | public directory | +| `babel` | `boolean | ESBuildPluginBabelOptions` | `false` | babel compilation (if you need to be compatible with browsers below es6, please turn it on) | + +## Usage + +```ts +// vite.config.ts +import { defineConfig } from 'vite' +import { publicTypescript } from 'vite-plugin-public-typescript' + +export default defineConfig({ + plugins: [ + publicTypescript(), + injectScripts((manifest) => [ + { + attrs: { + src: manifest.someScript, + }, + injectTo: 'head', + }, + ]) + ] +}) +``` + +### get manifest in client + +```ts +import { manifest } from 'vite-plugin-public-typescript/client' +``` + +### SPA + +In `SPA` applications, we can inject scripts into `index.html` via the `injectScripts` plugin. + +For a full example, see: [spa playground](./playground/spa/vite.config.ts) + +#### vite config + +```ts +import { defineConfig } from 'vite' +import { injectScripts, publicTypescript } from 'vite-plugin-public-typescript' + +export default defineConfig({ + plugins: [ + publicTypescript(), + injectScripts((manifest) => [ + { + attrs: { + src: manifest.spa, + }, + injectTo: 'head-prepend', + } + ]) + ], +}) +``` + +### SSR + + +In an `SSR` application, we can easily change the html to be rendered by injecting a script into it, since the `html` is essentially just a string! + +For a full example, see: [ssr playground](./playground/ssr/index.html) + +#### vite config + +```ts +import { defineConfig } from 'vite' +import { publicTypescript } from 'vite-plugin-public-typescript' + +export default defineConfig({ + plugins: [ + publicTypescript(), + ], +}) +``` + +#### server.js + +```ts +import { injectScriptsToHtml } from 'vite-plugin-public-typescript' + +html = injectScriptsToHtml(html, (manifest) => [ + { + attrs: { + src: manifest.ssr, + }, + injectTo: 'head-prepend', + }, +]) +``` + + +## License + +MIT + +[npm-img]: https://img.shields.io/npm/v/vite-plugin-public-typescript.svg diff --git a/README.md b/README.md index b394cad..e8b5697 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,9 @@ # vite-plugin-public-typescript + +**中文** | [English](./README-en.md) + > 在html中注入ts脚本的vite插件 **编译指定目录下的typescript文件,注入到html中使用** @@ -31,10 +34,17 @@ **`vite-plugin-public-typescript` 为优雅解决这些问题而生** -## 应用场景 +## 安装 + +```bash +pnpm add vite-plugin-public-typescript -D +``` + + +## Scenarios - 独立的第三方脚本,如 `sentry`,`google analytics`,`百度统计` 等 -- 希望在页面完全加载前就执行的脚本,如 [`modern-flexible`](https://github.com/hemengke1997/modern-flexible),[`lib-flexible`](https://github.com/amfe/lib-flexible) 等 +- 希望在页面完全加载前就执行的脚本,如 [`lib-flexible`](https://github.com/amfe/lib-flexible) 等 - 初始化全局函数 ## 功能 @@ -47,12 +57,6 @@ - 支持不同的输出方式(内存模式和文件模式) - 支持 CSR 和 SSR 应用 -## 安装 - -```bash -pnpm add vite-plugin-public-typescript -D -``` - ## 配置项 | 参数 | 类型 | 默认值 | 描述 | @@ -75,6 +79,7 @@ pnpm add vite-plugin-public-typescript -D ## 用法 ```ts +// vite.config.ts import { defineConfig } from 'vite' import { injectScripts, publicTypescript } from 'vite-plugin-public-typescript' @@ -84,7 +89,7 @@ export default defineConfig({ injectScripts((manifest) => [ { attrs: { - src: manifest.script, + src: manifest.someScript, }, injectTo: 'head', },