UNPKG

vite-plugin-uni-platform-loader

Version:

一个基于vite的,在uniapp中使用的插件。会根据当前编译的平台自动加载对应的文件。

1 lines 5.95 kB
{"version":3,"sources":["../src/index.ts"],"names":["PluginName","annotate","id","platform","extname","path","linkId","fs","content","newContent","annotateRegex","oldAnnotate","newAnnotate","vitePluginUniPlatformLoader","options","rootDir","_eventType","filename","currentPlatformFileRegexp","code","newCode","platformId"],"mappings":"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","file":"index.mjs","sourcesContent":["/* eslint-disable sort-keys */\n/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport type { Plugin } from 'vite';\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst PluginName = 'vite-plugin-uni-platform-loader';\n\nexport interface UniPlatformLoaderOptions {\n platform?: string;\n rootDir?: string;\n}\n\n/**\n * 添加注释\n * @param id 文件路径\n * @param platform 平台\n */\nfunction annotate(id: string, platform: string) {\n const extname = path.extname(id);\n const linkId = id.replace(`.${platform}${extname}`, extname);\n const linkExists = fs.existsSync(linkId);\n\n if (!linkExists) {\n // 目标文件不存在,不处理\n return;\n }\n\n const content = fs.readFileSync(linkId, { encoding: 'utf-8' });\n let newContent = content;\n\n const annotateRegex = /@uni-platform-loader last-modified-at=\\d+/;\n const oldAnnotate = content.match(annotateRegex)?.[0];\n let newAnnotate: string;\n\n switch (extname) {\n case '.html':\n case '.vue':\n newAnnotate = `<!-- @uni-platform-loader last-modified-at=${new Date().getTime()} -->`;\n break;\n default:\n newAnnotate = `/*** @uni-platform-loader last-modified-at=${new Date().getTime()} ***/`;\n break;\n }\n\n if (oldAnnotate) {\n newContent = content.replace(new RegExp(`.*${oldAnnotate}.*`), newAnnotate);\n } else {\n newContent = `${content}\\n${newAnnotate}\\n`;\n }\n\n fs.writeFileSync(linkId, newContent, { encoding: 'utf-8' });\n}\n\nexport default function vitePluginUniPlatformLoader(options?: UniPlatformLoaderOptions): Plugin {\n let { platform, rootDir } = options || {};\n\n if (!platform) {\n platform = 'h5';\n }\n\n if (!rootDir) {\n rootDir = path.resolve(process.cwd(), 'src');\n }\n\n // 检查根目录是否存在\n const rootDirExists = fs.existsSync(rootDir);\n\n if (!rootDirExists) {\n throw new Error(`根目录 ${rootDir} 不存在`);\n }\n\n // 监听根目录\n fs.watch(rootDir, { recursive: true }, (_eventType, filename) => {\n if (!filename || platform === 'h5') {\n // 没有文件名或平台是h5不处理\n return;\n }\n\n const id = path.resolve(rootDir, filename);\n const exists = fs.existsSync(id);\n\n if (!exists) {\n // 文件不存在\n // 添加注释\n annotate(id, platform);\n\n // 不继续处理\n return;\n }\n\n const extname = path.extname(id);\n const currentPlatformFileRegexp = new RegExp(`.*.${platform}${extname}$`);\n const isFile = fs.statSync(id).isFile();\n\n if (!isFile || !currentPlatformFileRegexp.test(id)) {\n // 不是文件或不是当前平台文件,不处理\n return;\n }\n\n // 添加注释\n annotate(id, platform);\n });\n\n return {\n name: PluginName,\n enforce: 'pre',\n transform(code, id) {\n let newCode = code;\n\n if (platform !== 'h5') {\n // 平台不是h5时才特殊处理\n // 平台特定文件路径\n const extname = path.extname(id);\n const platformId = id.replace(extname, `.${platform}${extname}`);\n\n // 且平台特定文件是否存在\n if (fs.existsSync(platformId)) {\n newCode = fs.readFileSync(platformId, 'utf-8') ?? code;\n }\n }\n\n return newCode;\n },\n };\n}\n"]}