lazy-js-utils
Version:
A collection of lazy-loaded JavaScript utilities for efficient development
50 lines (47 loc) • 1.5 kB
JavaScript
import process from "node:process";
import path from "node:path";
import fsp from "node:fs/promises";
//#region src/vite/vitePluginCopyHtml.ts
/**
* 将模板html内容拷贝到最终结果
* @param { string } template_url html url
* @returns Plugin
*/
async function vitePluginCopyHtml(template_url) {
let content = await fsp.readFile(path.resolve(process.cwd(), template_url), "utf-8");
return {
name: "vite-plugin-copy-html",
writeBundle(options, data) {
const outDir = `${options.dir}/index.html`;
const links = [];
const scripts = [];
for (const key in data) if (key.endsWith(".css")) links.push(key);
else if (key.endsWith(".js")) scripts.push(key);
if (links.length) content = content.replace(/<\/head>/, () => `</head>
${links.map((link) => `<link rel="stylesheet" href="/${link}">`)}`);
if (scripts.length) content = content.replace(/<\/body>/, () => ` ${scripts.map((script) => `<script src="/${script}" type="module"></script>`)}
</body>`);
fsp.writeFile(path.resolve(outDir), content, "utf-8");
}
};
}
//#endregion
//#region src/vite/vitePluginExport.ts
/**
* 将一些vite不能处理的文件导出
* @param { string } config 后缀文件
* @returns vitePlugin
*/
function vitePluginExport(config) {
return {
name: "vite-plugin-export",
transform(src, id) {
if (id.endsWith(config)) return {
code: `export default ${JSON.stringify(src)}`,
map: null
};
}
};
}
//#endregion
export { vitePluginCopyHtml, vitePluginExport };