layui/package/component/script/build.es.ts

118 lines
2.9 KiB
TypeScript
Raw Normal View History

2022-04-23 19:22:32 +08:00
import { UserConfigExport } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import * as fs from "fs";
const inputDir = resolve(process.cwd(), "./src/component");
const inputsArray = fs.readdirSync(inputDir).filter((name) => {
const componentDir = resolve(inputDir, name);
const isDir = fs.lstatSync(componentDir).isDirectory();
return isDir && fs.readdirSync(componentDir).includes("index.ts");
});
const inputs = inputsArray.reduce((backObj, pkgName) => {
backObj[pkgName] = resolve(
process.cwd(),
`./src/component/${pkgName}/index.ts`
);
return backObj;
}, {});
inputs["index"] = resolve(process.cwd(), "./src/index.ts");
const matchModule: string[] = [
2022-04-23 23:44:18 +08:00
"input",
"dropdown",
"carousel",
"transition",
"datePicker",
"header",
"selectOption",
"skeletonItem",
"tabItem",
"upload",
"checkbox",
"badge",
"button",
"tooltip",
"page",
2022-06-26 17:24:26 +08:00
"scroll",
2022-07-20 13:27:58 +08:00
"radio",
2022-07-20 14:22:29 +08:00
"empty",
2022-04-23 19:22:32 +08:00
];
export default (): UserConfigExport => {
return {
publicDir: false,
resolve: {
alias: [
{
find: "@",
replacement: resolve(process.cwd(), "./"),
},
],
},
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true,
},
},
postcss: {},
},
plugins: [vue()],
build: {
cssCodeSplit: true,
emptyOutDir: true,
2022-04-23 23:44:18 +08:00
outDir: "es",
2022-04-23 19:22:32 +08:00
lib: {
entry: resolve(process.cwd(), "./src/index.ts"),
formats: ["es"],
},
2022-06-27 11:07:22 +08:00
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ["console.log"],
},
output: {
comments: true,
},
},
2022-04-23 19:22:32 +08:00
rollupOptions: {
input: inputs,
output: {
globals: {
vue: "Vue",
},
2022-04-23 23:44:18 +08:00
manualChunks(id) {
let arr = id.toString().split("/");
if (id.includes("node_modules")) {
//id => layui-vue/node_modules/.pnpm/@vue+devtools-api@6.1.4/node_modules/@vue/devtools-api/lib/esm/api/app.js
const chunksName = "_chunks/";
2022-04-23 23:44:18 +08:00
return (
chunksName +
id.toString().split("node_modules/")[2].split("/")[0].toString()
);
} else if (arr.length >= 2) {
//if (arr.length >= 2 && arr[arr.length - 1].split('.')[1] != 'ts'){
2022-04-23 23:44:18 +08:00
let entryPoint = arr[arr.length - 2].toString();
2022-04-23 19:22:32 +08:00
if (matchModule.includes(entryPoint)) {
return entryPoint;
}
}
},
chunkFileNames: ({ name }) => {
return name === "index" ? "index.js" : "[name]/index.js";
},
entryFileNames: ({ name }) => {
return name === "index" ? "index.js" : "[name]/index.js";
},
assetFileNames: "[name]/index.css",
2022-04-23 23:44:18 +08:00
},
2022-04-23 19:22:32 +08:00
external: ["vue", "vue-router"],
},
},
};
};