fast-vite-plugins 1.0.12 → 1.0.14
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 +15 -9
- package/README.zh.md +15 -9
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -84,15 +84,21 @@ Apache Open Source License
|
|
|
84
84
|
|
|
85
85
|
Copyright © 2018-Now xiaoFang
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
The
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
License:
|
|
88
|
+
This Agreement grants any individual or organization that obtains a copy of this software and its related documentation (hereinafter referred to as the "Software").
|
|
89
|
+
Subject to the terms of this Agreement, you have the right to use, copy, modify, merge, publish, distribute, sublicense, and sell copies of the Software:
|
|
90
|
+
1.All copies or major parts of the Software must retain this Copyright Notice and this License Agreement.
|
|
91
|
+
2.The use, copying, modification, or distribution of the Software shall not violate applicable laws or infringe upon the legitimate rights and interests of others.
|
|
92
|
+
3.Modified or derivative works must clearly indicate the original author and the source of the original Software.
|
|
93
|
+
|
|
94
|
+
Special Statement:
|
|
95
|
+
- This Software is provided "as is" without any express or implied warranty of any kind, including but not limited to the warranty of merchantability, fitness for purpose, and non-infringement.
|
|
96
|
+
- In no event shall the author or copyright holder be liable for any direct or indirect loss caused by the use or inability to use this Software.
|
|
97
|
+
- Including but not limited to data loss, business interruption, etc.
|
|
98
|
+
|
|
99
|
+
Disclaimer:
|
|
100
|
+
It is prohibited to use this software to engage in illegal activities such as endangering national security, disrupting social order, or infringing on the legitimate rights and interests of others.
|
|
101
|
+
The author does not assume any responsibility for any legal disputes and liabilities caused by the secondary development of this software.
|
|
96
102
|
```
|
|
97
103
|
|
|
98
104
|
## Disclaimer
|
package/README.zh.md
CHANGED
|
@@ -84,15 +84,21 @@ Apache开源许可证
|
|
|
84
84
|
|
|
85
85
|
版权所有 © 2018-Now 小方
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
许可授权:
|
|
88
|
+
本协议授予任何获得本软件及其相关文档(以下简称“软件”)副本的个人或组织。
|
|
89
|
+
在遵守本协议条款的前提下,享有使用、复制、修改、合并、发布、分发、再许可、销售软件副本的权利:
|
|
90
|
+
1.所有软件副本或主要部分必须保留本版权声明及本许可协议。
|
|
91
|
+
2.软件的使用、复制、修改或分发不得违反适用法律或侵犯他人合法权益。
|
|
92
|
+
3.修改或衍生作品须明确标注原作者及原软件出处。
|
|
93
|
+
|
|
94
|
+
特别声明:
|
|
95
|
+
- 本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
|
|
96
|
+
- 在任何情况下,作者或版权持有人均不对因使用或无法使用本软件导致的任何直接或间接损失的责任。
|
|
97
|
+
- 包括但不限于数据丢失、业务中断等情况。
|
|
98
|
+
|
|
99
|
+
免责条款:
|
|
100
|
+
禁止利用本软件从事危害国家安全、扰乱社会秩序或侵犯他人合法权益等违法活动。
|
|
101
|
+
对于基于本软件二次开发所引发的任何法律纠纷及责任,作者不承担任何责任。
|
|
96
102
|
```
|
|
97
103
|
|
|
98
104
|
## 免责申明
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var M=Object.create;var $=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var L=(t,n)=>{for(var e in n)$(t,e,{get:n[e],enumerable:!0})},D=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of b(n))!R.call(t,o)&&o!==e&&$(t,o,{get:()=>n[o],enumerable:!(i=O(n,o))||i.enumerable});return t};var g=(t,n,e)=>(e=t!=null?M(J(t)):{},D(n||!t||!t.__esModule?$(e,"default",{value:t,enumerable:!0}):e,t)),B=t=>D($({},"__esModule",{value:!0}),t);var K={};L(K,{buildSvgIcon:()=>H,cdnImport:()=>Y,cdnJsDelivrUrl:()=>I,cdnUnpkgUrl:()=>V,findSvgFile:()=>w,tsxComponentAutoImport:()=>Z,versionUpdatePlugin:()=>q,vueComponentAutoImport:()=>G,writeTSXIcon:()=>T});module.exports=B(K);var h=g(require("fs"),1),d=g(require("path"),1),w=t=>{let n=[];return h.default.readdirSync(t,{withFileTypes:!0}).forEach(i=>{if(i.isDirectory())n.push(...w(d.default.join(t,i.name)));else{let o=i.name.replace(".svg",""),p=h.default.readFileSync(d.default.join(t,i.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,m)=>{let s=m.match(/viewBox="[^"]+"/),r=m.match(/width="(\d+)"/),a=m.match(/height="(\d+)"/),l=1024,u=1024;r&&(l=r[0]),a&&(u=a[0]);let f="";return s?f=s[0]:f=`viewBox="0 0 ${l} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${f}>`});n.push({iconName:o,componentName:o.charAt(0).toUpperCase()+o.slice(1),iconContent:p})}}),n.sort((i,o)=>i.iconName<o.iconName?-1:i.iconName>o.iconName?1:0)},T=(t,n,e)=>{h.default.mkdirSync(n,{recursive:!0});let i=`import { defineComponent } from "vue";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* ${t} \u56FE\u6807\u7EC4\u4EF6
|
|
@@ -7,7 +7,7 @@ export const ${t} = defineComponent({
|
|
|
7
7
|
name: "${t}",
|
|
8
8
|
render() {
|
|
9
9
|
return (
|
|
10
|
-
${
|
|
10
|
+
${e.split(`
|
|
11
11
|
`).map(o=>` ${o}`).join(`
|
|
12
12
|
`)}
|
|
13
13
|
);
|
|
@@ -15,7 +15,7 @@ ${n.split(`
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
export default ${t};
|
|
18
|
-
`;h.default.writeFileSync(d.default.join(
|
|
18
|
+
`;h.default.writeFileSync(d.default.join(n,"index.tsx"),i)};function H(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:i=>{e=i},buildStart(){let i=w(d.default.resolve(e.root,t)),o=d.default.resolve(e.root,n);h.default.mkdirSync(o,{recursive:!0});let p="",c="",m="";i.forEach((s,r)=>{T(s.componentName,d.default.join(o,s.iconName),s.iconContent),p+=`import { ${s.componentName} } from "./${s.iconName}";
|
|
19
19
|
`,c+=` ${s.componentName},`,m+=`export * from "./${s.iconName}";
|
|
20
20
|
`,r+1<i.length&&(c+=`
|
|
21
21
|
`)}),h.default.writeFileSync(d.default.join(o,"index.ts"),`import type { DefineComponent } from "vue";
|
|
@@ -24,23 +24,23 @@ ${m}
|
|
|
24
24
|
export default [
|
|
25
25
|
${c}
|
|
26
26
|
] as unknown as DefineComponent[];
|
|
27
|
-
`)}}}var N=g(require("fs"),1),
|
|
27
|
+
`)}}}var N=g(require("fs"),1),A=g(require("path"),1),U=g(require("rollup-plugin-external-globals"),1),j=require("vite-plugin-externals"),W=process.env.NODE_ENV==="development";function _(t){let n=process.cwd(),e=A.default.join(n,"node_modules",t,"package.json");return N.default.existsSync(e)?JSON.parse(N.default.readFileSync(e,"utf8")).version:""}function E(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function k(t,n){let{path:e}=n;return E(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function z(t,n){n=t.prodUrl||n;let e=t,i=t.version||_(e.name),o=[];Array.isArray(e.path)?o=e.path:o.push(e.path);let p={...e,version:i};o=o.map(s=>{if(!i&&!E(s))throw new Error(`modules: ${p.name} package.json file does not exist`);return k(n,{name:p.name,version:p.version,path:s})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let m=Array.isArray(c)?c.map(s=>k(n,{name:p.name,version:p.version,path:s})):[];return{...e,version:i,pathList:o,cssList:m}}var I="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",V="https://unpkg.com/{package}@{version}/{path}";function Y(t){let{modules:n=[],prodUrl:e=I,enableInDevMode:i=!1,generateCssLinkTag:o,generateScriptTag:p}=t,c=!1,m=(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(e):a).map(a=>z(a,e)),s={};m.forEach(a=>{s[a.name]=a.var,Array.isArray(a.alias)&&a.alias.forEach(l=>{s[l]=a.var})});let r=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(a,{command:l}){c=l==="build";let u={build:{rollupOptions:{plugins:[]}}};return c&&(u.build.rollupOptions.plugins=[(0,U.default)(s)]),u},transformIndexHtml(a){if(!c&&!i)return a;let l=[];return m.forEach(u=>{u.pathList.forEach(f=>{let C=p?.(u.name,f)||{},S={src:f,crossorigin:"anonymous",...u?.attrs??{},...C.attrs};l.push({tag:"script",attrs:S,...C})}),u.cssList.forEach(f=>{let C=o?.(u.name,f)||{},S={href:f,rel:"stylesheet",crossorigin:"anonymous",...u?.attrs??{},...C.attrs};l.push({tag:"link",attrs:S,...C})})}),l}}];return W&&i&&r.push((0,j.viteExternalsPlugin)(s,{enforce:"pre"})),r}var x=g(require("fs"),1),P=g(require("path"),1);function Z(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=r=>r.charAt(0).toUpperCase()+r.slice(1),i=typeof t=="string"?e:t.formatter??e,o=x.default.readdirSync(n,{withFileTypes:!0});if(o?.length===0)return;let p=o.filter(r=>r.name!=="index.ts").map(r=>({componentName:i(r.name),fileName:r.name})).sort((r,a)=>r.componentName<a.componentName?-1:r.componentName>a.componentName?1:0),c="",m="",s="";p.forEach(({componentName:r,fileName:a},l)=>{c+=`import { ${r} } from "./${a}";
|
|
28
28
|
`,m+=`export * from "./${a}";
|
|
29
|
-
`,s+=` ${r},`,
|
|
30
|
-
`)}),x.default.writeFileSync(P.default.join(
|
|
29
|
+
`,s+=` ${r},`,l+1<p.length&&(s+=`
|
|
30
|
+
`)}),x.default.writeFileSync(P.default.join(n,"index.ts"),`import type { Plugin } from "vue";
|
|
31
31
|
${c}
|
|
32
32
|
${m}
|
|
33
33
|
export default [
|
|
34
34
|
${s}
|
|
35
35
|
] as Plugin[];
|
|
36
|
-
`)}}}function
|
|
36
|
+
`)}}}function G(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=r=>r.charAt(0).toUpperCase()+r.slice(1),i=typeof t=="string"?e:t.formatter??e,o=x.default.readdirSync(n,{withFileTypes:!0});if(o?.length===0)return;let p=o.filter(r=>r.name!=="index.ts").map(r=>({componentName:i(r.name),fileName:r.name})).sort((r,a)=>r.componentName<a.componentName?-1:r.componentName>a.componentName?1:0),c="",m="",s="";p.forEach(({componentName:r,fileName:a},l)=>{c+=`import ${r} from "./${a}/index.vue";
|
|
37
37
|
`,m+=`export * from "./${a}/index.vue";
|
|
38
|
-
`,s+=` ${r},`,
|
|
39
|
-
`)}),x.default.writeFileSync(P.default.join(
|
|
38
|
+
`,s+=` ${r},`,l+1<p.length&&(s+=`
|
|
39
|
+
`)}),x.default.writeFileSync(P.default.join(n,"index.ts"),`import type { DefineComponent } from "vue";
|
|
40
40
|
${c}
|
|
41
41
|
${m}
|
|
42
42
|
export default [
|
|
43
43
|
${s}
|
|
44
44
|
] as unknown as DefineComponent[];
|
|
45
|
-
`)}}}var v=g(require("fs"),1),F=g(require("path"),1);function y(t,
|
|
45
|
+
`)}}}var v=g(require("fs"),1),F=g(require("path"),1);function y(t,n=2){return t.toString().padStart(n,"0")}function X(t){let n=t.getUTCFullYear(),e=y(t.getUTCMonth()+1),i=y(t.getUTCDate()),o=y(t.getUTCHours()),p=y(t.getUTCMinutes()),c=y(t.getUTCSeconds()),m=y(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${i} ${o}:${p}:${c}.${m}`}function q(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let i=X(new Date),o=n.publicDir,p=F.default.join(o,"version.json");v.default.existsSync(o)||v.default.mkdirSync(o);let c=JSON.stringify({version:`v${t}`,dateTime:i},null,4);v.default.writeFileSync(p,c);let m=F.default.join(n.base,"package.json");if(v.default.existsSync(m)){let s=JSON.parse(v.default.readFileSync(m,"utf-8"));s.version=t,v.default.writeFileSync(m,JSON.stringify(s,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,cdnJsDelivrUrl,cdnUnpkgUrl,findSvgFile,tsxComponentAutoImport,versionUpdatePlugin,vueComponentAutoImport,writeTSXIcon});
|
|
46
46
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["export * from \"./buildSvgIcon\";\nexport * from \"./cdnImport\";\nexport * from \"./cdnImport/type\";\nexport * from \"./componentAutoImport\";\nexport * from \"./componentAutoImport/type\";\nexport * from \"./versionUpdate\";\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst {\n\t\tmodules = [],\n\t\tprodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\",\n\t\tenableInDevMode = false,\n\t\tgenerateCssLinkTag,\n\t\tgenerateScriptTag,\n\t} = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["index_exports","__export","buildSvgIcon","cdnImport","findSvgFile","tsxComponentAutoImport","versionUpdatePlugin","vueComponentAutoImport","writeTSXIcon","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","import_fs","import_path","import_rollup_plugin_external_globals","import_vite_plugin_externals","isDev","getModuleVersion","name","pwd","pkgFile","path","fs","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","cusomize","attrs","import_fs","import_path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","fs","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","path","vueComponentAutoImport","import_fs","import_path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","path","fs","content","pkgPath","pkgJson"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["export * from \"./buildSvgIcon\";\nexport * from \"./cdnImport\";\nexport * from \"./cdnImport/type\";\nexport * from \"./componentAutoImport\";\nexport * from \"./componentAutoImport/type\";\nexport * from \"./versionUpdate\";\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["index_exports","__export","buildSvgIcon","cdnImport","cdnJsDelivrUrl","cdnUnpkgUrl","findSvgFile","tsxComponentAutoImport","versionUpdatePlugin","vueComponentAutoImport","writeTSXIcon","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","import_fs","import_path","import_rollup_plugin_external_globals","import_vite_plugin_externals","isDev","getModuleVersion","name","pwd","pkgFile","path","fs","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","cusomize","attrs","import_fs","import_path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","fs","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","path","vueComponentAutoImport","import_fs","import_path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","path","fs","content","pkgPath","pkgJson"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -71,6 +71,8 @@ interface CdnImportOptions {
|
|
|
71
71
|
generateCssLinkTag?: (name: string, cssUrl: string) => Omit<HtmlTagDescriptor, "tag" | "children">;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
declare const cdnJsDelivrUrl = "https://cdn.jsdelivr.net/npm/{name}@{version}/{path}";
|
|
75
|
+
declare const cdnUnpkgUrl = "https://unpkg.com/{package}@{version}/{path}";
|
|
74
76
|
/**
|
|
75
77
|
* CDN 导入
|
|
76
78
|
* @param options
|
|
@@ -111,4 +113,4 @@ declare function vueComponentAutoImport(options: string | AutoImportOptions): Pl
|
|
|
111
113
|
*/
|
|
112
114
|
declare function versionUpdatePlugin(version: string): Plugin;
|
|
113
115
|
|
|
114
|
-
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
|
|
116
|
+
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
|
package/dist/index.d.ts
CHANGED
|
@@ -71,6 +71,8 @@ interface CdnImportOptions {
|
|
|
71
71
|
generateCssLinkTag?: (name: string, cssUrl: string) => Omit<HtmlTagDescriptor, "tag" | "children">;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
declare const cdnJsDelivrUrl = "https://cdn.jsdelivr.net/npm/{name}@{version}/{path}";
|
|
75
|
+
declare const cdnUnpkgUrl = "https://unpkg.com/{package}@{version}/{path}";
|
|
74
76
|
/**
|
|
75
77
|
* CDN 导入
|
|
76
78
|
* @param options
|
|
@@ -111,4 +113,4 @@ declare function vueComponentAutoImport(options: string | AutoImportOptions): Pl
|
|
|
111
113
|
*/
|
|
112
114
|
declare function versionUpdatePlugin(version: string): Plugin;
|
|
113
115
|
|
|
114
|
-
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
|
|
116
|
+
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import d from"fs";import g from"path";var $=t=>{let
|
|
1
|
+
import d from"fs";import g from"path";var $=t=>{let n=[];return d.readdirSync(t,{withFileTypes:!0}).forEach(s=>{if(s.isDirectory())n.push(...$(g.join(t,s.name)));else{let r=s.name.replace(".svg",""),p=d.readFileSync(g.join(t,s.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,m)=>{let i=m.match(/viewBox="[^"]+"/),o=m.match(/width="(\d+)"/),a=m.match(/height="(\d+)"/),l=1024,u=1024;o&&(l=o[0]),a&&(u=a[0]);let f="";return i?f=i[0]:f=`viewBox="0 0 ${l} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${f}>`});n.push({iconName:r,componentName:r.charAt(0).toUpperCase()+r.slice(1),iconContent:p})}}),n.sort((s,r)=>s.iconName<r.iconName?-1:s.iconName>r.iconName?1:0)},D=(t,n,e)=>{d.mkdirSync(n,{recursive:!0});let s=`import { defineComponent } from "vue";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* ${t} \u56FE\u6807\u7EC4\u4EF6
|
|
@@ -7,7 +7,7 @@ export const ${t} = defineComponent({
|
|
|
7
7
|
name: "${t}",
|
|
8
8
|
render() {
|
|
9
9
|
return (
|
|
10
|
-
${
|
|
10
|
+
${e.split(`
|
|
11
11
|
`).map(r=>` ${r}`).join(`
|
|
12
12
|
`)}
|
|
13
13
|
);
|
|
@@ -15,7 +15,7 @@ ${n.split(`
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
export default ${t};
|
|
18
|
-
`;d.writeFileSync(g.join(
|
|
18
|
+
`;d.writeFileSync(g.join(n,"index.tsx"),s)};function J(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:s=>{e=s},buildStart(){let s=$(g.resolve(e.root,t)),r=g.resolve(e.root,n);d.mkdirSync(r,{recursive:!0});let p="",c="",m="";s.forEach((i,o)=>{D(i.componentName,g.join(r,i.iconName),i.iconContent),p+=`import { ${i.componentName} } from "./${i.iconName}";
|
|
19
19
|
`,c+=` ${i.componentName},`,m+=`export * from "./${i.iconName}";
|
|
20
20
|
`,o+1<s.length&&(c+=`
|
|
21
21
|
`)}),d.writeFileSync(g.join(r,"index.ts"),`import type { DefineComponent } from "vue";
|
|
@@ -24,23 +24,23 @@ ${m}
|
|
|
24
24
|
export default [
|
|
25
25
|
${c}
|
|
26
26
|
] as unknown as DefineComponent[];
|
|
27
|
-
`)}}}import S from"fs";import
|
|
27
|
+
`)}}}import S from"fs";import T from"path";import k from"rollup-plugin-external-globals";import{viteExternalsPlugin as A}from"vite-plugin-externals";var U=process.env.NODE_ENV==="development";function j(t){let n=process.cwd(),e=T.join(n,"node_modules",t,"package.json");return S.existsSync(e)?JSON.parse(S.readFileSync(e,"utf8")).version:""}function N(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function w(t,n){let{path:e}=n;return N(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function E(t,n){n=t.prodUrl||n;let e=t,s=t.version||j(e.name),r=[];Array.isArray(e.path)?r=e.path:r.push(e.path);let p={...e,version:s};r=r.map(i=>{if(!s&&!N(i))throw new Error(`modules: ${p.name} package.json file does not exist`);return w(n,{name:p.name,version:p.version,path:i})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let m=Array.isArray(c)?c.map(i=>w(n,{name:p.name,version:p.version,path:i})):[];return{...e,version:s,pathList:r,cssList:m}}var I="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",_="https://unpkg.com/{package}@{version}/{path}";function z(t){let{modules:n=[],prodUrl:e=I,enableInDevMode:s=!1,generateCssLinkTag:r,generateScriptTag:p}=t,c=!1,m=(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(e):a).map(a=>E(a,e)),i={};m.forEach(a=>{i[a.name]=a.var,Array.isArray(a.alias)&&a.alias.forEach(l=>{i[l]=a.var})});let o=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(a,{command:l}){c=l==="build";let u={build:{rollupOptions:{plugins:[]}}};return c&&(u.build.rollupOptions.plugins=[k(i)]),u},transformIndexHtml(a){if(!c&&!s)return a;let l=[];return m.forEach(u=>{u.pathList.forEach(f=>{let y=p?.(u.name,f)||{},x={src:f,crossorigin:"anonymous",...u?.attrs??{},...y.attrs};l.push({tag:"script",attrs:x,...y})}),u.cssList.forEach(f=>{let y=r?.(u.name,f)||{},x={href:f,rel:"stylesheet",crossorigin:"anonymous",...u?.attrs??{},...y.attrs};l.push({tag:"link",attrs:x,...y})})}),l}}];return U&&s&&o.push(A(i,{enforce:"pre"})),o}import C from"fs";import P from"path";function G(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=o=>o.charAt(0).toUpperCase()+o.slice(1),s=typeof t=="string"?e:t.formatter??e,r=C.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let p=r.filter(o=>o.name!=="index.ts").map(o=>({componentName:s(o.name),fileName:o.name})).sort((o,a)=>o.componentName<a.componentName?-1:o.componentName>a.componentName?1:0),c="",m="",i="";p.forEach(({componentName:o,fileName:a},l)=>{c+=`import { ${o} } from "./${a}";
|
|
28
28
|
`,m+=`export * from "./${a}";
|
|
29
|
-
`,i+=` ${o},`,
|
|
30
|
-
`)}),C.writeFileSync(P.join(
|
|
29
|
+
`,i+=` ${o},`,l+1<p.length&&(i+=`
|
|
30
|
+
`)}),C.writeFileSync(P.join(n,"index.ts"),`import type { Plugin } from "vue";
|
|
31
31
|
${c}
|
|
32
32
|
${m}
|
|
33
33
|
export default [
|
|
34
34
|
${i}
|
|
35
35
|
] as Plugin[];
|
|
36
|
-
`)}}}function
|
|
36
|
+
`)}}}function X(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=o=>o.charAt(0).toUpperCase()+o.slice(1),s=typeof t=="string"?e:t.formatter??e,r=C.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let p=r.filter(o=>o.name!=="index.ts").map(o=>({componentName:s(o.name),fileName:o.name})).sort((o,a)=>o.componentName<a.componentName?-1:o.componentName>a.componentName?1:0),c="",m="",i="";p.forEach(({componentName:o,fileName:a},l)=>{c+=`import ${o} from "./${a}/index.vue";
|
|
37
37
|
`,m+=`export * from "./${a}/index.vue";
|
|
38
|
-
`,i+=` ${o},`,
|
|
39
|
-
`)}),C.writeFileSync(P.join(
|
|
38
|
+
`,i+=` ${o},`,l+1<p.length&&(i+=`
|
|
39
|
+
`)}),C.writeFileSync(P.join(n,"index.ts"),`import type { DefineComponent } from "vue";
|
|
40
40
|
${c}
|
|
41
41
|
${m}
|
|
42
42
|
export default [
|
|
43
43
|
${i}
|
|
44
44
|
] as unknown as DefineComponent[];
|
|
45
|
-
`)}}}import h from"fs";import F from"path";function v(t,
|
|
45
|
+
`)}}}import h from"fs";import F from"path";function v(t,n=2){return t.toString().padStart(n,"0")}function M(t){let n=t.getUTCFullYear(),e=v(t.getUTCMonth()+1),s=v(t.getUTCDate()),r=v(t.getUTCHours()),p=v(t.getUTCMinutes()),c=v(t.getUTCSeconds()),m=v(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${s} ${r}:${p}:${c}.${m}`}function tt(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let s=M(new Date),r=n.publicDir,p=F.join(r,"version.json");h.existsSync(r)||h.mkdirSync(r);let c=JSON.stringify({version:`v${t}`,dateTime:s},null,4);h.writeFileSync(p,c);let m=F.join(n.base,"package.json");if(h.existsSync(m)){let i=JSON.parse(h.readFileSync(m,"utf-8"));i.version=t,h.writeFileSync(m,JSON.stringify(i,null,2),"utf-8")}}}}export{J as buildSvgIcon,z as cdnImport,I as cdnJsDelivrUrl,_ as cdnUnpkgUrl,$ as findSvgFile,G as tsxComponentAutoImport,tt as versionUpdatePlugin,X as vueComponentAutoImport,D as writeTSXIcon};
|
|
46
46
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst {\n\t\tmodules = [],\n\t\tprodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\",\n\t\tenableInDevMode = false,\n\t\tgenerateCssLinkTag,\n\t\tgenerateScriptTag,\n\t} = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["fs","path","findSvgFile","dir","svgContents","file","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","fs","path","externalGlobals","viteExternalsPlugin","isDev","getModuleVersion","name","pwd","pkgFile","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","html","descriptors","cusomize","attrs","fs","path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","vueComponentAutoImport","fs","path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","content","pkgPath","pkgJson"]}
|
|
1
|
+
{"version":3,"sources":["../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["fs","path","findSvgFile","dir","svgContents","file","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","fs","path","externalGlobals","viteExternalsPlugin","isDev","getModuleVersion","name","pwd","pkgFile","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","html","descriptors","cusomize","attrs","fs","path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","vueComponentAutoImport","fs","path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","content","pkgPath","pkgJson"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fast-vite-plugins",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"description": "Fast Vite插件库.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"rollup-plugin-external-globals": "^0.
|
|
45
|
+
"rollup-plugin-external-globals": "^0.13.0",
|
|
46
46
|
"vite-plugin-externals": "^0.6.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|