From 18588491c4bf6c663edbd1b01c9e32cb0a9e2226 Mon Sep 17 00:00:00 2001 From: xiaochenchen Date: Wed, 16 Feb 2022 01:14:01 +0800 Subject: [PATCH] feat: add transformIndexHtml --- README.md | 4 +- examples/index.html | 3 + examples/package.json | 2 +- examples/pnpm-lock.yaml | 8 +- examples/vite.config.ts | 3 +- index.d.ts | 3 +- package.json | 3 +- pnpm-lock.yaml | 236 +++++++++++++++++++++++----------------- src/index.ts | 64 ++++++++++- 9 files changed, 214 insertions(+), 112 deletions(-) diff --git a/README.md b/README.md index 6e1f785..2edf307 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,9 @@ The following show the default values of the configuration ```ts dynamicBase({ // dynamic public path var string, default window.__dynamic_base__ - publicPath: 'window.__dynamic_base__' + publicPath: 'window.__dynamic_base__', + // transformIndexHtml, default false, maybe change default true + transformIndexHtml: false }) ``` diff --git a/examples/index.html b/examples/index.html index ab3b284..f686452 100644 --- a/examples/index.html +++ b/examples/index.html @@ -6,6 +6,9 @@ Vite App + diff --git a/examples/package.json b/examples/package.json index 69e968d..daf9b88 100644 --- a/examples/package.json +++ b/examples/package.json @@ -14,7 +14,7 @@ "@vitejs/plugin-vue": "^2.0.0", "typescript": "^4.4.4", "vite": "^2.7.2", - "vite-plugin-dynamic-base": "0.0.3", + "vite-plugin-dynamic-base": "0.1.0", "vue-tsc": "^0.29.8" } } diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml index 170acec..5963164 100644 --- a/examples/pnpm-lock.yaml +++ b/examples/pnpm-lock.yaml @@ -4,7 +4,7 @@ specifiers: '@vitejs/plugin-vue': ^2.0.0 typescript: ^4.4.4 vite: ^2.7.2 - vite-plugin-dynamic-base: 0.0.3 + vite-plugin-dynamic-base: 0.1.0 vue: ^3.2.25 vue-router: ^4.0.12 vue-tsc: ^0.29.8 @@ -17,7 +17,7 @@ devDependencies: '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/2.1.0_vite@2.7.13+vue@3.2.29 typescript: registry.npmmirror.com/typescript/4.5.5 vite: registry.npmmirror.com/vite/2.7.13 - vite-plugin-dynamic-base: 0.0.3 + vite-plugin-dynamic-base: 0.1.0 vue-tsc: registry.npmmirror.com/vue-tsc/0.29.8_typescript@4.5.5 packages: @@ -166,8 +166,8 @@ packages: dev: true optional: true - /vite-plugin-dynamic-base/0.0.3: - resolution: {integrity: sha512-6mhCERJQCfiWoGjKW4Vf649zd71sqNBJBgYjp7Ssydb6RiGidQs3A2dktcJ2GW8BZnaoD9mWexJgSWE3DVWorw==} + /vite-plugin-dynamic-base/0.1.0: + resolution: {integrity: sha512-N5eDRra7BGJbThEQ8IHodUPOrC1J41itKPx6VoMTP6b1cYzfwh354hiw+N3iNh1ooEw0vfChv8Jduh10AuUkow==} dev: true registry.npmmirror.com/@babel/helper-validator-identifier/7.16.7: diff --git a/examples/vite.config.ts b/examples/vite.config.ts index 04f2c33..ae79bdd 100644 --- a/examples/vite.config.ts +++ b/examples/vite.config.ts @@ -1,13 +1,14 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { dynamicBase } from 'vite-plugin-dynamic-base' +// import { dynamicBase } from '../dist/index' // https://vitejs.dev/config/ export default defineConfig({ // base: 'a/b', plugins: [ vue(), - dynamicBase() + dynamicBase({ transformIndexHtml: true }) ], build: { // assetsDir: 'assets/a/b' diff --git a/index.d.ts b/index.d.ts index 6155865..146fb39 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,3 +1,4 @@ export interface Options { - publicPath?: string + publicPath?: string, + transformIndexHtml?: boolean } diff --git a/package.json b/package.json index 98f3cb0..fadf61e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vite-plugin-dynamic-base", - "version": "0.0.3", + "version": "0.1.0", "description": "Resolve all resource files dynamic publicPath, like Webpack's __webpack_public_path__", "main": "dist/index.js", "scripts": { @@ -22,6 +22,7 @@ "homepage": "https://github.com/chenxch/vite-plugin-dynamic-base", "devDependencies": { "@types/node": "^16.0.0", + "node-html-parser": "^5.2.0", "vite": "^2.4.0" }, "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01b6d3f..5ee40dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,190 +2,234 @@ lockfileVersion: 5.3 specifiers: '@types/node': ^16.0.0 + node-html-parser: ^5.2.0 vite: ^2.4.0 devDependencies: '@types/node': registry.npmmirror.com/@types/node/16.11.22 + node-html-parser: 5.2.0 vite: registry.npmmirror.com/vite/2.7.13 packages: - registry.npmmirror.com/@types/node/16.11.22: - resolution: {integrity: sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-16.11.22.tgz} - name: '@types/node' - version: 16.11.22 + /boolbase/1.0.0: + resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} dev: true - registry.npmmirror.com/esbuild-android-arm64/0.13.15: - resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/download/esbuild-android-arm64-0.13.15.tgz} - name: esbuild-android-arm64 - version: 0.13.15 + /css-select/4.2.1: + resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} + dependencies: + boolbase: 1.0.0 + css-what: 5.1.0 + domhandler: 4.3.0 + domutils: 2.8.0 + nth-check: 2.0.1 + dev: true + + /css-what/5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} + engines: {node: '>= 6'} + dev: true + + /dom-serializer/1.3.2: + resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + entities: 2.2.0 + dev: true + + /domelementtype/2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + dev: true + + /domhandler/4.3.0: + resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.2.0 + dev: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.3.2 + domelementtype: 2.2.0 + domhandler: 4.3.0 + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /esbuild-android-arm64/0.13.15: + resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-darwin-64/0.13.15: - resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/download/esbuild-darwin-64-0.13.15.tgz} - name: esbuild-darwin-64 - version: 0.13.15 + /esbuild-darwin-64/0.13.15: + resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-darwin-arm64/0.13.15: - resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/download/esbuild-darwin-arm64-0.13.15.tgz} - name: esbuild-darwin-arm64 - version: 0.13.15 + /esbuild-darwin-arm64/0.13.15: + resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-freebsd-64/0.13.15: - resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/download/esbuild-freebsd-64-0.13.15.tgz} - name: esbuild-freebsd-64 - version: 0.13.15 + /esbuild-freebsd-64/0.13.15: + resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-freebsd-arm64/0.13.15: - resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/download/esbuild-freebsd-arm64-0.13.15.tgz} - name: esbuild-freebsd-arm64 - version: 0.13.15 + /esbuild-freebsd-arm64/0.13.15: + resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-32/0.13.15: - resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/download/esbuild-linux-32-0.13.15.tgz} - name: esbuild-linux-32 - version: 0.13.15 + /esbuild-linux-32/0.13.15: + resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-64/0.13.15: - resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/download/esbuild-linux-64-0.13.15.tgz} - name: esbuild-linux-64 - version: 0.13.15 + /esbuild-linux-64/0.13.15: + resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-arm/0.13.15: - resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/download/esbuild-linux-arm-0.13.15.tgz} - name: esbuild-linux-arm - version: 0.13.15 + /esbuild-linux-arm/0.13.15: + resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-arm64/0.13.15: - resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/download/esbuild-linux-arm64-0.13.15.tgz} - name: esbuild-linux-arm64 - version: 0.13.15 + /esbuild-linux-arm64/0.13.15: + resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-mips64le/0.13.15: - resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/download/esbuild-linux-mips64le-0.13.15.tgz} - name: esbuild-linux-mips64le - version: 0.13.15 + /esbuild-linux-mips64le/0.13.15: + resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-linux-ppc64le/0.13.15: - resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/download/esbuild-linux-ppc64le-0.13.15.tgz} - name: esbuild-linux-ppc64le - version: 0.13.15 + /esbuild-linux-ppc64le/0.13.15: + resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-netbsd-64/0.13.15: - resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/download/esbuild-netbsd-64-0.13.15.tgz} - name: esbuild-netbsd-64 - version: 0.13.15 + /esbuild-netbsd-64/0.13.15: + resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-openbsd-64/0.13.15: - resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/download/esbuild-openbsd-64-0.13.15.tgz} - name: esbuild-openbsd-64 - version: 0.13.15 + /esbuild-openbsd-64/0.13.15: + resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-sunos-64/0.13.15: - resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/download/esbuild-sunos-64-0.13.15.tgz} - name: esbuild-sunos-64 - version: 0.13.15 + /esbuild-sunos-64/0.13.15: + resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-windows-32/0.13.15: - resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/download/esbuild-windows-32-0.13.15.tgz} - name: esbuild-windows-32 - version: 0.13.15 + /esbuild-windows-32/0.13.15: + resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-windows-64/0.13.15: - resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/download/esbuild-windows-64-0.13.15.tgz} - name: esbuild-windows-64 - version: 0.13.15 + /esbuild-windows-64/0.13.15: + resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - registry.npmmirror.com/esbuild-windows-arm64/0.13.15: - resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/download/esbuild-windows-arm64-0.13.15.tgz} - name: esbuild-windows-arm64 - version: 0.13.15 + /esbuild-windows-arm64/0.13.15: + resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /node-html-parser/5.2.0: + resolution: {integrity: sha512-fmiwLfQu+J2A0zjwSEkztSHexAf5qq/WoiL/Hgo1K7JpfEP+OGWY5maG0kGaM+IFVdixF/1QbyXaQ3h4cGfeLw==} + dependencies: + css-select: 4.2.1 + he: 1.2.0 + dev: true + + /nth-check/2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} + dependencies: + boolbase: 1.0.0 + dev: true + + registry.npmmirror.com/@types/node/16.11.22: + resolution: {integrity: sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-16.11.22.tgz} + name: '@types/node' + version: 16.11.22 + dev: true + registry.npmmirror.com/esbuild/0.13.15: resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.13.15.tgz} name: esbuild @@ -193,34 +237,24 @@ packages: hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.13.15 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.13.15 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.13.15 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.13.15 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.13.15 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.13.15 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.13.15 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.13.15 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.13.15 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.13.15 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.13.15 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.13.15 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.13.15 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.13.15 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.13.15 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.13.15 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.13.15 - dev: true - - registry.npmmirror.com/fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} - name: fsevents - version: 2.3.2 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + esbuild-android-arm64: 0.13.15 + esbuild-darwin-64: 0.13.15 + esbuild-darwin-arm64: 0.13.15 + esbuild-freebsd-64: 0.13.15 + esbuild-freebsd-arm64: 0.13.15 + esbuild-linux-32: 0.13.15 + esbuild-linux-64: 0.13.15 + esbuild-linux-arm: 0.13.15 + esbuild-linux-arm64: 0.13.15 + esbuild-linux-mips64le: 0.13.15 + esbuild-linux-ppc64le: 0.13.15 + esbuild-netbsd-64: 0.13.15 + esbuild-openbsd-64: 0.13.15 + esbuild-sunos-64: 0.13.15 + esbuild-windows-32: 0.13.15 + esbuild-windows-64: 0.13.15 + esbuild-windows-arm64: 0.13.15 dev: true - optional: true registry.npmmirror.com/function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} @@ -294,7 +328,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true registry.npmmirror.com/source-map-js/1.0.2: @@ -334,5 +368,5 @@ packages: resolve: registry.npmmirror.com/resolve/1.22.0 rollup: registry.npmmirror.com/rollup/2.67.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true diff --git a/src/index.ts b/src/index.ts index f7a042c..87b6087 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,18 @@ -import type { Plugin } from 'vite' +import type { Plugin, IndexHtmlTransformResult } from 'vite' +import { parse } from 'node-html-parser' import type { Options } from '../index' export function dynamicBase(options?: Options): Plugin { - const { publicPath = 'window.__dynamic_base__' } = options || {} + const defaultOptions:Options ={ + publicPath: 'window.__dynamic_base__', + transformIndexHtml: false // maybe dfault true + } + + const { + publicPath, + transformIndexHtml + } = {...defaultOptions ,...(options || {})} + const preloadHelperId = 'vite/preload-helper' let assetsDir = 'assets' let base = '/' @@ -35,6 +45,56 @@ export function dynamicBase(options?: Options): Plugin { chunk.code = chunk.code.replace(assetsMarkerRE, `${publicPath}+$1`) } } + }, + transformIndexHtml: { + enforce: 'post', + transform(html): IndexHtmlTransformResult { + if(!transformIndexHtml) { + return html + } + const document = parse(html, { comment: true }) + const assetsMarker = `${base}${assetsDir}/` + const assetsTags = document.querySelectorAll(`link[href^="${assetsMarker}"],script[src^="${assetsMarker}"]`) + const preloads = assetsTags.map(o => { + const result = { + parentTagName: o.parentNode.rawTagName, + tagName: o.rawTagName, + attrs: Object.assign({}, o.attrs) + } + o.parentNode.removeChild(o) + return result + }) + const injectCode = ` +` + return document.outerHTML.replace('', injectCode) + } } } }