fast-vite-plugins 1.0.1 → 1.0.3
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/dist/index.cjs +49 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +87 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/package.json +67 -56
- package/.eslintignore +0 -11
- package/.eslintrc.cjs +0 -378
- package/.gitattributes +0 -13
- package/.prettierignore +0 -3
- package/.prettierrc.cjs +0 -38
- package/.vscode/extensions.json +0 -10
- package/.vscode/settings.json +0 -40
- package/Fast.png +0 -0
- package/LICENSE +0 -201
- package/README.md +0 -41
- package/README.zh.md +0 -41
- package/fast-vite-plugins/package.json +0 -64
- package/packages/buildSvgIcon/index.ts +0 -161
- package/packages/cdnImport/index.ts +0 -202
- package/packages/cdnImport/type.ts +0 -44
- package/packages/componentAutoImport/index.ts +0 -81
- package/packages/componentAutoImport/type.ts +0 -12
- package/packages/index.ts +0 -6
- package/packages/versionUpdate/index.ts +0 -60
- package/tsconfig.json +0 -20
- package/tsconfig.tsbuildinfo +0 -1
- package/tsup.config.ts +0 -20
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";var T=Object.create;var y=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var b=(t,n)=>{for(var e in n)y(t,e,{get:n[e],enumerable:!0})},w=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of j(n))!U.call(t,r)&&r!==e&&y(t,r,{get:()=>n[r],enumerable:!(i=k(n,r))||i.enumerable});return t};var m=(t,n,e)=>(e=t!=null?T(M(t)):{},w(n||!t||!t.__esModule?y(e,"default",{value:t,enumerable:!0}):e,t)),O=t=>w(y({},"__esModule",{value:!0}),t);var Z={};b(Z,{buildSvgIcon:()=>J,cdnImport:()=>W,componentAutoImport:()=>_,versionUpdatePlugin:()=>Y});module.exports=O(Z);var g=m(require("fs"),1),u=m(require("path"),1);function P(t){let n=[];return g.default.readdirSync(t,{withFileTypes:!0}).forEach(i=>{if(i.isDirectory())n.push(...P(u.default.join(t,i.name)));else{let r=i.name.replace(".svg",""),l=g.default.readFileSync(u.default.join(t,i.name)).toString().replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").replace(/(\r)|(\n)/g,"").replace(/<svg([^>+].*?)>/,(c,p)=>{let o=p.match(/viewBox="[^"]+"/),s=p.match(/width="(\d+)"/),a=p.match(/height="(\d+)"/),f=1024,h=1024;s&&(f=s[0]),a&&(h=a[0]);let C="";return o?C=o[0]:C=`viewBox="0 0 ${f} ${h}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${C}>`});n.push({iconName:r.charAt(0).toUpperCase()+r.slice(1),iconContent:l})}}),n.sort((i,r)=>i.iconName<r.iconName?-1:i.iconName>r.iconName?1:0)}function R(t,n,e){g.default.mkdirSync(n,{recursive:!0});let i=`import { defineComponent } from "vue";
|
|
2
|
+
import { ElIcon } from "element-plus";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* ${t} \u56FE\u6807\u7EC4\u4EF6
|
|
6
|
+
*/
|
|
7
|
+
export const ${t} = defineComponent({
|
|
8
|
+
name: "${t}",
|
|
9
|
+
components: {
|
|
10
|
+
ElIcon,
|
|
11
|
+
},
|
|
12
|
+
setup(props, { attrs, slots, emit, expose }) {
|
|
13
|
+
expose({});
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
attrs,
|
|
17
|
+
slots,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
render() {
|
|
21
|
+
return (
|
|
22
|
+
<ElIcon {...this.attrs} class="el-icon icon fa-icon fa-icon-${t}">
|
|
23
|
+
${e}
|
|
24
|
+
</ElIcon>
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export default ${t};
|
|
30
|
+
`;g.default.writeFileSync(u.default.join(n,"index.tsx"),i)}function J(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:i=>{e=i},buildStart(){let i=P(u.default.resolve(e.root,t)),r=u.default.resolve(e.root,n);g.default.mkdirSync(r,{recursive:!0});let l="",c="",p="";i.forEach((o,s)=>{R(o.iconName,u.default.join(r,o.iconName),o.iconContent),l+=`import { ${o.iconName} } from "./${o.iconName}";
|
|
31
|
+
`,c+=`export * from "./${o.iconName}";
|
|
32
|
+
`,p+=` ${o.iconName},`,s+1<i.length&&(p+=`
|
|
33
|
+
`)}),g.default.writeFileSync(u.default.resolve(r,"index.ts"),`import type { DefineComponent } from "vue";
|
|
34
|
+
${l}
|
|
35
|
+
${c}
|
|
36
|
+
export default [
|
|
37
|
+
${p}
|
|
38
|
+
] as unknown as DefineComponent[];
|
|
39
|
+
`)}}}var x=m(require("fs"),1),F=m(require("path"),1),D=m(require("rollup-plugin-external-globals"),1),E=require("vite-plugin-externals"),L=process.env.NODE_ENV==="development";function B(t){let n=process.cwd(),e=F.default.join(n,"node_modules",t,"package.json");return x.default.existsSync(e)?JSON.parse(x.default.readFileSync(e,"utf8")).version:""}function A(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function N(t,n){let{path:e}=n;return A(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function H(t,n){n=t.prodUrl||n;let e=t,i=B(e.name),r=[];Array.isArray(e.path)?r=e.path:r.push(e.path);let l={...e,version:i};r=r.map(o=>{if(!i&&!A(o))throw new Error(`modules: ${l.name} package.json file does not exist`);return N(n,{...l,path:o})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(o=>N(n,{...l,path:o})):[];return{...e,version:i,pathList:r,cssList:p}}function W(t){let{modules:n=[],prodUrl:e="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:i=!1}=t,r=!1,l=n.map(o=>(Array.isArray(o)?o:[o]).map(a=>typeof a=="function"?a(e):a).map(a=>H(a,e))).flat(),c={};l.forEach(o=>{c[o.name]=o.var,Array.isArray(o.alias)&&o.alias.forEach(s=>{c[s]=o.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(o,{command:s}){r=s==="build";let a={build:{rollupOptions:{plugins:[]}}};return r&&(a.build.rollupOptions.plugins=[(0,D.default)(c)]),a},transformIndexHtml(o){if(!r&&!i)return o;let s=[];return l.forEach(a=>{a.pathList.forEach(f=>{let h={src:f,crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"script",attrs:h})}),a.cssList.forEach(f=>{let h={href:f,rel:"stylesheet",crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"link",attrs:h})})}),s}}];return L&&i&&p.push((0,E.viteExternalsPlugin)(c,{enforce:"pre"})),p}var $=m(require("fs"),1),I=m(require("path"),1);function _(t){if(t)return{name:"fast-vite-plugin-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=s=>s.charAt(0).toUpperCase()+s.slice(1),i=typeof t=="string"?e:t.formatter??e,r=$.default.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let l=r.filter(s=>s.name!=="index.ts").map(s=>({componentName:i(s.name),fileName:s.name})).sort((s,a)=>s.componentName<a.componentName?-1:s.componentName>a.componentName?1:0),c="",p="",o="";l.forEach(({componentName:s,fileName:a},f)=>{c+=`import ${s} from "./${a}/index.vue";
|
|
40
|
+
`,p+=`export * from "./${a}/index.vue";
|
|
41
|
+
`,o+=` ${s},`,f+1<l.length&&(o+=`
|
|
42
|
+
`)}),$.default.writeFileSync(I.default.join(n,"index.ts"),`import type { DefineComponent } from "vue";
|
|
43
|
+
${c}
|
|
44
|
+
${p}
|
|
45
|
+
export default [
|
|
46
|
+
${o}
|
|
47
|
+
] as unknown as DefineComponent[];
|
|
48
|
+
`)}}}var d=m(require("fs"),1),S=m(require("path"),1);function v(t,n=2){return t.toString().padStart(n,"0")}function V(t){let n=t.getUTCFullYear(),e=v(t.getUTCMonth()+1),i=v(t.getUTCDate()),r=v(t.getUTCHours()),l=v(t.getUTCMinutes()),c=v(t.getUTCSeconds()),p=v(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${i} ${r}:${l}:${c}.${p}`}function Y(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let i=V(new Date),r=n.publicDir,l=S.default.join(r,"version.json");d.default.existsSync(r)||d.default.mkdirSync(r);let c=JSON.stringify({version:`v${t}`,dateTime:i},null,4);d.default.writeFileSync(l,c);let p=S.default.join(n.base,"package.json");if(d.default.existsSync(p)){let o=JSON.parse(d.default.readFileSync(p,"utf-8"));o.version=t,d.default.writeFileSync(p,JSON.stringify(o,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,componentAutoImport,versionUpdatePlugin});
|
|
49
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../packages/index.ts","../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/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 */\nfunction findSvgFile(dir: string): { iconName: string; iconContent: string }[] {\n\t// svg 内容\n\tconst svgContents: { iconName: 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 svgInfo = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name))\n\t\t\t\t.toString()\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// .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\ticonName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgInfo,\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 */\nfunction writeTsxComponent(componentName: string, componentDir: string, content: string): void {\n\tfs.mkdirSync(componentDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(props, { attrs, slots, emit, expose }) {\n\t\texpose({});\n\n\t\treturn {\n\t\t\tattrs,\n\t\t\tslots,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"el-icon icon fa-icon fa-icon-${componentName}\">\n\t\t\t\t${content}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(componentDir, \"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 svgCRPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(svgCRPath, { recursive: true });\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTsxComponent(svg.iconName, path.join(svgCRPath, svg.iconName), svg.iconContent);\n\n\t\t\t\timportContent += `import { ${svg.iconName} } from \"./${svg.iconName}\";\\n`;\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\\n`;\n\n\t\t\t\ttypeContent += `\t${svg.iconName},`;\n\n\t\t\t\tif (idx + 1 < svgFiles.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.resolve(svgCRPath, \"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 { buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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 & { version?: string; pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst 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\t...data,\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\t...data,\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 { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = options;\n\n\tlet isBuild = false;\n\n\tconst data = modules\n\t\t.map((m) => {\n\t\t\tconst list = (Array.isArray(m) ? m : [m]).map((v) => (typeof v === \"function\" ? v(prodUrl) : v));\n\t\t\treturn list.map((v) => getModuleInfo(v, prodUrl));\n\t\t})\n\t\t.flat();\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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * 组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\n */\nfunction componentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-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\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 { componentAutoImport };\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":["packages_exports","__export","buildSvgIcon","cdnImport","componentAutoImport","versionUpdatePlugin","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgInfo","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTsxComponent","componentName","componentDir","content","componentContent","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","svgCRPath","importContent","exportContent","typeContent","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","isBuild","m","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","attrs","import_fs","import_path","componentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","fs","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","path","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
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 构建 svg 图标组件
|
|
5
|
+
* @param dir svg 文件路径
|
|
6
|
+
* @param writeDir 写入的文件路径 相对的即可
|
|
7
|
+
*/
|
|
8
|
+
declare function buildSvgIcon(dir: string, writeDir: string): Plugin;
|
|
9
|
+
|
|
10
|
+
interface Module {
|
|
11
|
+
/**
|
|
12
|
+
* 模块名称
|
|
13
|
+
*/
|
|
14
|
+
name: string;
|
|
15
|
+
/**
|
|
16
|
+
* 模块变量
|
|
17
|
+
*/
|
|
18
|
+
var: string;
|
|
19
|
+
/**
|
|
20
|
+
* 模块路径
|
|
21
|
+
*/
|
|
22
|
+
path: string | string[];
|
|
23
|
+
/**
|
|
24
|
+
* 名称的别名,例如 "react-dom/client" 是 "react-dom" 的别名
|
|
25
|
+
*/
|
|
26
|
+
alias?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* CSS 文件路径
|
|
29
|
+
*/
|
|
30
|
+
css?: string | string[];
|
|
31
|
+
/**
|
|
32
|
+
* 生产环境 URL
|
|
33
|
+
*/
|
|
34
|
+
prodUrl?: string;
|
|
35
|
+
/**
|
|
36
|
+
* 元素的其他属性
|
|
37
|
+
*/
|
|
38
|
+
attrs?: Record<string, any>;
|
|
39
|
+
}
|
|
40
|
+
type GetModuleFunc = (prodUrl: string) => Module;
|
|
41
|
+
interface CdnImportOptions {
|
|
42
|
+
/**
|
|
43
|
+
* 生产环境 URL
|
|
44
|
+
*/
|
|
45
|
+
prodUrl?: string;
|
|
46
|
+
modules: (Module | Module[] | GetModuleFunc | GetModuleFunc[])[];
|
|
47
|
+
/**
|
|
48
|
+
* 是否在开发模式启用,默认是 false
|
|
49
|
+
*/
|
|
50
|
+
enableInDevMode?: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* CDN 导入
|
|
55
|
+
* @param options
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
declare function cdnImport(options: CdnImportOptions): Plugin[];
|
|
59
|
+
|
|
60
|
+
interface AutoImportOptions {
|
|
61
|
+
/**
|
|
62
|
+
* 文件夹
|
|
63
|
+
*/
|
|
64
|
+
dir: string;
|
|
65
|
+
/**
|
|
66
|
+
* 自定义组件名称
|
|
67
|
+
* @param fName 文件夹名称
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
formatter?: (fName: string) => string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 组件自动导入
|
|
75
|
+
* @description 只会生成安装文件
|
|
76
|
+
* @param dir 组件文件夹路径
|
|
77
|
+
*/
|
|
78
|
+
declare function componentAutoImport(options: string | AutoImportOptions): Plugin;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 版本更新插件
|
|
82
|
+
* @param version 不要携带 'v',示例:1.0.0
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
declare function versionUpdatePlugin(version: string): Plugin;
|
|
86
|
+
|
|
87
|
+
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, componentAutoImport, versionUpdatePlugin };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 构建 svg 图标组件
|
|
5
|
+
* @param dir svg 文件路径
|
|
6
|
+
* @param writeDir 写入的文件路径 相对的即可
|
|
7
|
+
*/
|
|
8
|
+
declare function buildSvgIcon(dir: string, writeDir: string): Plugin;
|
|
9
|
+
|
|
10
|
+
interface Module {
|
|
11
|
+
/**
|
|
12
|
+
* 模块名称
|
|
13
|
+
*/
|
|
14
|
+
name: string;
|
|
15
|
+
/**
|
|
16
|
+
* 模块变量
|
|
17
|
+
*/
|
|
18
|
+
var: string;
|
|
19
|
+
/**
|
|
20
|
+
* 模块路径
|
|
21
|
+
*/
|
|
22
|
+
path: string | string[];
|
|
23
|
+
/**
|
|
24
|
+
* 名称的别名,例如 "react-dom/client" 是 "react-dom" 的别名
|
|
25
|
+
*/
|
|
26
|
+
alias?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* CSS 文件路径
|
|
29
|
+
*/
|
|
30
|
+
css?: string | string[];
|
|
31
|
+
/**
|
|
32
|
+
* 生产环境 URL
|
|
33
|
+
*/
|
|
34
|
+
prodUrl?: string;
|
|
35
|
+
/**
|
|
36
|
+
* 元素的其他属性
|
|
37
|
+
*/
|
|
38
|
+
attrs?: Record<string, any>;
|
|
39
|
+
}
|
|
40
|
+
type GetModuleFunc = (prodUrl: string) => Module;
|
|
41
|
+
interface CdnImportOptions {
|
|
42
|
+
/**
|
|
43
|
+
* 生产环境 URL
|
|
44
|
+
*/
|
|
45
|
+
prodUrl?: string;
|
|
46
|
+
modules: (Module | Module[] | GetModuleFunc | GetModuleFunc[])[];
|
|
47
|
+
/**
|
|
48
|
+
* 是否在开发模式启用,默认是 false
|
|
49
|
+
*/
|
|
50
|
+
enableInDevMode?: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* CDN 导入
|
|
55
|
+
* @param options
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
declare function cdnImport(options: CdnImportOptions): Plugin[];
|
|
59
|
+
|
|
60
|
+
interface AutoImportOptions {
|
|
61
|
+
/**
|
|
62
|
+
* 文件夹
|
|
63
|
+
*/
|
|
64
|
+
dir: string;
|
|
65
|
+
/**
|
|
66
|
+
* 自定义组件名称
|
|
67
|
+
* @param fName 文件夹名称
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
formatter?: (fName: string) => string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 组件自动导入
|
|
75
|
+
* @description 只会生成安装文件
|
|
76
|
+
* @param dir 组件文件夹路径
|
|
77
|
+
*/
|
|
78
|
+
declare function componentAutoImport(options: string | AutoImportOptions): Plugin;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 版本更新插件
|
|
82
|
+
* @param version 不要携带 'v',示例:1.0.0
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
declare function versionUpdatePlugin(version: string): Plugin;
|
|
86
|
+
|
|
87
|
+
export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, componentAutoImport, versionUpdatePlugin };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import g from"fs";import f from"path";function y(t){let e=[];return g.readdirSync(t,{withFileTypes:!0}).forEach(r=>{if(r.isDirectory())e.push(...y(f.join(t,r.name)));else{let i=r.name.replace(".svg",""),l=g.readFileSync(f.join(t,r.name)).toString().replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").replace(/(\r)|(\n)/g,"").replace(/<svg([^>+].*?)>/,(c,p)=>{let n=p.match(/viewBox="[^"]+"/),s=p.match(/width="(\d+)"/),a=p.match(/height="(\d+)"/),m=1024,u=1024;s&&(m=s[0]),a&&(u=a[0]);let v="";return n?v=n[0]:v=`viewBox="0 0 ${m} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${v}>`});e.push({iconName:i.charAt(0).toUpperCase()+i.slice(1),iconContent:l})}}),e.sort((r,i)=>r.iconName<i.iconName?-1:r.iconName>i.iconName?1:0)}function P(t,e,o){g.mkdirSync(e,{recursive:!0});let r=`import { defineComponent } from "vue";
|
|
2
|
+
import { ElIcon } from "element-plus";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* ${t} \u56FE\u6807\u7EC4\u4EF6
|
|
6
|
+
*/
|
|
7
|
+
export const ${t} = defineComponent({
|
|
8
|
+
name: "${t}",
|
|
9
|
+
components: {
|
|
10
|
+
ElIcon,
|
|
11
|
+
},
|
|
12
|
+
setup(props, { attrs, slots, emit, expose }) {
|
|
13
|
+
expose({});
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
attrs,
|
|
17
|
+
slots,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
render() {
|
|
21
|
+
return (
|
|
22
|
+
<ElIcon {...this.attrs} class="el-icon icon fa-icon fa-icon-${t}">
|
|
23
|
+
${o}
|
|
24
|
+
</ElIcon>
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export default ${t};
|
|
30
|
+
`;g.writeFileSync(f.join(e,"index.tsx"),r)}function U(t,e){if(!t||!e)return;let o;return{name:"fast-vite-plugin-build-svg-icon",configResolved:r=>{o=r},buildStart(){let r=y(f.resolve(o.root,t)),i=f.resolve(o.root,e);g.mkdirSync(i,{recursive:!0});let l="",c="",p="";r.forEach((n,s)=>{P(n.iconName,f.join(i,n.iconName),n.iconContent),l+=`import { ${n.iconName} } from "./${n.iconName}";
|
|
31
|
+
`,c+=`export * from "./${n.iconName}";
|
|
32
|
+
`,p+=` ${n.iconName},`,s+1<r.length&&(p+=`
|
|
33
|
+
`)}),g.writeFileSync(f.resolve(i,"index.ts"),`import type { DefineComponent } from "vue";
|
|
34
|
+
${l}
|
|
35
|
+
${c}
|
|
36
|
+
export default [
|
|
37
|
+
${p}
|
|
38
|
+
] as unknown as DefineComponent[];
|
|
39
|
+
`)}}}import C from"fs";import N from"path";import F from"rollup-plugin-external-globals";import{viteExternalsPlugin as D}from"vite-plugin-externals";var E=process.env.NODE_ENV==="development";function A(t){let e=process.cwd(),o=N.join(e,"node_modules",t,"package.json");return C.existsSync(o)?JSON.parse(C.readFileSync(o,"utf8")).version:""}function $(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function x(t,e){let{path:o}=e;return $(o)&&(t=o),t.replace(/\{name\}/g,e.name).replace(/\{version\}/g,e.version).replace(/\{path\}/g,o)}function I(t,e){e=t.prodUrl||e;let o=t,r=A(o.name),i=[];Array.isArray(o.path)?i=o.path:i.push(o.path);let l={...o,version:r};i=i.map(n=>{if(!r&&!$(n))throw new Error(`modules: ${l.name} package.json file does not exist`);return x(e,{...l,path:n})});let c=o.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(n=>x(e,{...l,path:n})):[];return{...o,version:r,pathList:i,cssList:p}}function B(t){let{modules:e=[],prodUrl:o="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:r=!1}=t,i=!1,l=e.map(n=>(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(o):a).map(a=>I(a,o))).flat(),c={};l.forEach(n=>{c[n.name]=n.var,Array.isArray(n.alias)&&n.alias.forEach(s=>{c[s]=n.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(n,{command:s}){i=s==="build";let a={build:{rollupOptions:{plugins:[]}}};return i&&(a.build.rollupOptions.plugins=[F(c)]),a},transformIndexHtml(n){if(!i&&!r)return n;let s=[];return l.forEach(a=>{a.pathList.forEach(m=>{let u={src:m,crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"script",attrs:u})}),a.cssList.forEach(m=>{let u={href:m,rel:"stylesheet",crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"link",attrs:u})})}),s}}];return E&&r&&p.push(D(c,{enforce:"pre"})),p}import S from"fs";import T from"path";function V(t){if(t)return{name:"fast-vite-plugin-component-auto-import",buildStart(){let e=typeof t=="string"?t:t.dir,o=s=>s.charAt(0).toUpperCase()+s.slice(1),r=typeof t=="string"?o:t.formatter??o,i=S.readdirSync(e,{withFileTypes:!0});if(i?.length===0)return;let l=i.filter(s=>s.name!=="index.ts").map(s=>({componentName:r(s.name),fileName:s.name})).sort((s,a)=>s.componentName<a.componentName?-1:s.componentName>a.componentName?1:0),c="",p="",n="";l.forEach(({componentName:s,fileName:a},m)=>{c+=`import ${s} from "./${a}/index.vue";
|
|
40
|
+
`,p+=`export * from "./${a}/index.vue";
|
|
41
|
+
`,n+=` ${s},`,m+1<l.length&&(n+=`
|
|
42
|
+
`)}),S.writeFileSync(T.join(e,"index.ts"),`import type { DefineComponent } from "vue";
|
|
43
|
+
${c}
|
|
44
|
+
${p}
|
|
45
|
+
export default [
|
|
46
|
+
${n}
|
|
47
|
+
] as unknown as DefineComponent[];
|
|
48
|
+
`)}}}import d from"fs";import w from"path";function h(t,e=2){return t.toString().padStart(e,"0")}function k(t){let e=t.getUTCFullYear(),o=h(t.getUTCMonth()+1),r=h(t.getUTCDate()),i=h(t.getUTCHours()),l=h(t.getUTCMinutes()),c=h(t.getUTCSeconds()),p=h(t.getUTCMilliseconds(),3);return`Z ${e}-${o}-${r} ${i}:${l}:${c}.${p}`}function q(t){let e;return{name:"fast-vite-plugin-version-update",configResolved:o=>{e=o},buildStart(){let r=k(new Date),i=e.publicDir,l=w.join(i,"version.json");d.existsSync(i)||d.mkdirSync(i);let c=JSON.stringify({version:`v${t}`,dateTime:r},null,4);d.writeFileSync(l,c);let p=w.join(e.base,"package.json");if(d.existsSync(p)){let n=JSON.parse(d.readFileSync(p,"utf-8"));n.version=t,d.writeFileSync(p,JSON.stringify(n,null,2),"utf-8")}}}}export{U as buildSvgIcon,B as cdnImport,V as componentAutoImport,q as versionUpdatePlugin};
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\nfunction findSvgFile(dir: string): { iconName: string; iconContent: string }[] {\n\t// svg 内容\n\tconst svgContents: { iconName: 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 svgInfo = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name))\n\t\t\t\t.toString()\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// .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\ticonName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgInfo,\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 */\nfunction writeTsxComponent(componentName: string, componentDir: string, content: string): void {\n\tfs.mkdirSync(componentDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(props, { attrs, slots, emit, expose }) {\n\t\texpose({});\n\n\t\treturn {\n\t\t\tattrs,\n\t\t\tslots,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"el-icon icon fa-icon fa-icon-${componentName}\">\n\t\t\t\t${content}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(componentDir, \"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 svgCRPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(svgCRPath, { recursive: true });\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTsxComponent(svg.iconName, path.join(svgCRPath, svg.iconName), svg.iconContent);\n\n\t\t\t\timportContent += `import { ${svg.iconName} } from \"./${svg.iconName}\";\\n`;\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\\n`;\n\n\t\t\t\ttypeContent += `\t${svg.iconName},`;\n\n\t\t\t\tif (idx + 1 < svgFiles.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.resolve(svgCRPath, \"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 { buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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 & { version?: string; pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst 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\t...data,\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\t...data,\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 { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = options;\n\n\tlet isBuild = false;\n\n\tconst data = modules\n\t\t.map((m) => {\n\t\t\tconst list = (Array.isArray(m) ? m : [m]).map((v) => (typeof v === \"function\" ? v(prodUrl) : v));\n\t\t\treturn list.map((v) => getModuleInfo(v, prodUrl));\n\t\t})\n\t\t.flat();\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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * 组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\n */\nfunction componentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-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\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 { componentAutoImport };\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","svgInfo","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTsxComponent","componentName","componentDir","content","componentContent","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","svgCRPath","importContent","exportContent","typeContent","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","isBuild","m","externalMap","alias","plugins","_","command","userConfig","html","descriptors","attrs","fs","path","componentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","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,57 +1,68 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
2
|
+
"name": "fast-vite-plugins",
|
|
3
|
+
"author": "小方",
|
|
4
|
+
"version": "1.0.3",
|
|
5
|
+
"description": "Fast Vite插件库.",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://fastdotnet.com",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://gitee.com/China-xiaoFang/fast.vite.plugins"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://gitee.com/China-xiaoFang/fast.vite.plugins/issues"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"rollup-plugin-external-globals": "^0.12.0",
|
|
21
|
+
"vite-plugin-externals": "^0.6.2"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^22.5.4",
|
|
25
|
+
"@typescript-eslint/eslint-plugin": "^8.4.0",
|
|
26
|
+
"@typescript-eslint/parser": "^8.4.0",
|
|
27
|
+
"eslint": "^8.57.0",
|
|
28
|
+
"eslint-config-prettier": "^9.1.0",
|
|
29
|
+
"eslint-define-config": "^2.1.0",
|
|
30
|
+
"eslint-plugin-import": "^2.30.0",
|
|
31
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
32
|
+
"eslint-plugin-vue": "^9.28.0",
|
|
33
|
+
"prettier": "^3.3.3",
|
|
34
|
+
"tsup": "^8.2.4",
|
|
35
|
+
"tsx": "^4.19.0",
|
|
36
|
+
"typescript": "^5.5.4",
|
|
37
|
+
"vite": "^5.4.3",
|
|
38
|
+
"vue-eslint-parser": "^9.4.3",
|
|
39
|
+
"vue-tsc": "^2.1.6"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=20.0.0"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"fast",
|
|
46
|
+
"vite",
|
|
47
|
+
"plugin library",
|
|
48
|
+
"plugin"
|
|
49
|
+
],
|
|
50
|
+
"main": "dist/index.js",
|
|
51
|
+
"module": "dist/index.js",
|
|
52
|
+
"types": "dist/index.d.ts",
|
|
53
|
+
"files": [
|
|
54
|
+
"/Fast.png",
|
|
55
|
+
"/LICENSE",
|
|
56
|
+
"/README.md",
|
|
57
|
+
"/README.zh.md",
|
|
58
|
+
"./dist"
|
|
59
|
+
],
|
|
60
|
+
"exports": {
|
|
61
|
+
".": {
|
|
62
|
+
"import": "./dist/index.js",
|
|
63
|
+
"require": "./dist/index.cjs"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"unpkg": "dist/index.js",
|
|
67
|
+
"jsdelivr": "dist/index.js"
|
|
68
|
+
}
|