vite-plugin-uni-inject 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/index.cjs +6 -0
- package/dist/index.d.cts +19 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +6 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# vite-plugin-uni-inject
|
|
2
|
+
|
|
3
|
+
利用 Vite 插件机制,实现 uniapp 项目中无法使用公共组件的问题。
|
|
4
|
+
|
|
5
|
+
## 功能特点
|
|
6
|
+
|
|
7
|
+
- 干净的注入任何代码,没有多余的结构。
|
|
8
|
+
- 支持注入 `<page-meta/>` 这种只能放在页面第一个位置的标签节点。
|
|
9
|
+
- 自动识别所有 `page.json` 中的 vue 文件并注入,无需维护注入页面表。
|
|
10
|
+
|
|
11
|
+
## 如何使用
|
|
12
|
+
|
|
13
|
+
原理就是通过 vite 插件机制,在构建过程中自动注入 inject.vue 中的代码。
|
|
14
|
+
|
|
15
|
+
### 安装依赖
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm i -D vite-plugin-uni-inject
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### vite.config.ts
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { defineConfig } from "vite";
|
|
25
|
+
import uni from "@dcloudio/vite-plugin-uni";
|
|
26
|
+
import uniInject from "vite-plugin-uni-inject";
|
|
27
|
+
|
|
28
|
+
// 如果有重写 page.json 文件的插件,请确保写在 uniInject 之前
|
|
29
|
+
export default defineConfig(() => {
|
|
30
|
+
return {
|
|
31
|
+
plugins: [uniInject(), uni()],
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 报告错误
|
|
37
|
+
|
|
38
|
+
欢迎提交 issue 与我们讨论。
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";var U=Object.create;var u=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var O=(t,e)=>{for(var s in e)u(t,s,{get:e[s],enumerable:!0})},h=(t,e,s,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of x(e))!C.call(t,o)&&o!==s&&u(t,o,{get:()=>e[o],enumerable:!(a=k(e,o))||a.enumerable});return t};var v=(t,e,s)=>(s=t!=null?U(z(t)):{},h(e||!t||!t.__esModule?u(s,"default",{value:t,enumerable:!0}):s,t)),b=t=>h(u({},"__esModule",{value:!0}),t);var E={};O(E,{default:()=>w});module.exports=b(E);var P=require("@vue/compiler-sfc"),l=v(require("fs"),1),c=v(require("path"),1);function w(t){let{injectPath:e="App.inject.vue"}=t||{},s=new Set,a="",o="";return{name:"vite-plugin-uni-inject",enforce:"pre",configResolved(f){let p=c.default.resolve(f.root,"src"),g=c.default.join(p,e);if(!l.default.existsSync(g))return;let i=l.default.readFileSync(g,"utf-8"),{descriptor:n}=(0,P.parse)(i);n.template&&(a=n.template.content.trim()),n.scriptSetup&&(o=n.scriptSetup.content.trim());let r=c.default.join(p,"pages.json");if(!l.default.existsSync(r))return;let d=l.default.readFileSync(r,"utf-8"),S=JSON.parse(d),j=(m,y="")=>{m.forEach(J=>{let $=c.default.join(p,y,`${J.path}.vue`);s.add(c.default.normalize($))})};j(S.pages),(S.subPackages??[]).forEach(m=>{j(m.pages,m.root)})},transform(f,p){if(!p.endsWith(".vue"))return;let g=c.default.normalize(p);if(!s.has(g))return;let{descriptor:i}=(0,P.parse)(f),n=f;if(a&&i.template){let r=i.template.content.trim(),d=`${a}
|
|
2
|
+
${r}`.trim();n=n.slice(0,i.template.loc.start.offset)+`
|
|
3
|
+
${d}
|
|
4
|
+
`+n.slice(i.template.loc.end.offset)}if(o&&i.scriptSetup){let r=i.scriptSetup.loc.start.offset;n=n.slice(0,r)+`
|
|
5
|
+
${o}
|
|
6
|
+
`+n.slice(r)}return{code:n,map:null}}}}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** 插件配置 */
|
|
2
|
+
interface PluginOptions {
|
|
3
|
+
/** 要注入的文件路径 - 基于项目 src 目录 */
|
|
4
|
+
injectPath?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
declare function export_default(opts?: PluginOptions): {
|
|
8
|
+
name: string;
|
|
9
|
+
enforce: "pre";
|
|
10
|
+
configResolved(config: {
|
|
11
|
+
root: string;
|
|
12
|
+
}): void;
|
|
13
|
+
transform(code: string, id: string): {
|
|
14
|
+
code: string;
|
|
15
|
+
map: null;
|
|
16
|
+
} | undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { export_default as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** 插件配置 */
|
|
2
|
+
interface PluginOptions {
|
|
3
|
+
/** 要注入的文件路径 - 基于项目 src 目录 */
|
|
4
|
+
injectPath?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
declare function export_default(opts?: PluginOptions): {
|
|
8
|
+
name: string;
|
|
9
|
+
enforce: "pre";
|
|
10
|
+
configResolved(config: {
|
|
11
|
+
root: string;
|
|
12
|
+
}): void;
|
|
13
|
+
transform(code: string, id: string): {
|
|
14
|
+
code: string;
|
|
15
|
+
map: null;
|
|
16
|
+
} | undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { export_default as default };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{parse as d}from"@vue/compiler-sfc";import a from"fs";import o from"path";function k(P){let{injectPath:S="App.inject.vue"}=P||{},g=new Set,p="",l="";return{name:"vite-plugin-uni-inject",enforce:"pre",configResolved(i){let s=o.resolve(i.root,"src"),r=o.join(s,S);if(!a.existsSync(r))return;let e=a.readFileSync(r,"utf-8"),{descriptor:t}=d(e);t.template&&(p=t.template.content.trim()),t.scriptSetup&&(l=t.scriptSetup.content.trim());let n=o.join(s,"pages.json");if(!a.existsSync(n))return;let f=a.readFileSync(n,"utf-8"),m=JSON.parse(f),u=(c,j="")=>{c.forEach(h=>{let v=o.join(s,j,`${h.path}.vue`);g.add(o.normalize(v))})};u(m.pages),(m.subPackages??[]).forEach(c=>{u(c.pages,c.root)})},transform(i,s){if(!s.endsWith(".vue"))return;let r=o.normalize(s);if(!g.has(r))return;let{descriptor:e}=d(i),t=i;if(p&&e.template){let n=e.template.content.trim(),f=`${p}
|
|
2
|
+
${n}`.trim();t=t.slice(0,e.template.loc.start.offset)+`
|
|
3
|
+
${f}
|
|
4
|
+
`+t.slice(e.template.loc.end.offset)}if(l&&e.scriptSetup){let n=e.scriptSetup.loc.start.offset;t=t.slice(0,n)+`
|
|
5
|
+
${l}
|
|
6
|
+
`+t.slice(n)}return{code:t,map:null}}}}export{k as default};
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vite-plugin-uni-inject",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "vite-plugin-uni-inject",
|
|
6
|
+
"author": "Kriac",
|
|
7
|
+
"homepage": "https://github.com/Kriac/vite-plugin-uni-inject",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/Kriac/vite-plugin-uni-inject.git"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"vite-plugin",
|
|
14
|
+
"uni-inject"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"lint": "vue-tsc -b --noEmit",
|
|
18
|
+
"build": "tsup",
|
|
19
|
+
"release": "npm publish --access public"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@vue/compiler-sfc": "3.5.27"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/node": "25.0.10",
|
|
26
|
+
"tsup": "8.5.1",
|
|
27
|
+
"vue-tsc": "3.2.1"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js",
|
|
37
|
+
"require": "./dist/index.cjs"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|