From 11b8f180336ddde0f7dad8edc2055268e1fe2067 Mon Sep 17 00:00:00 2001 From: sight <1453017105@qq.com> Date: Sat, 23 Apr 2022 19:22:32 +0800 Subject: [PATCH] test: manualChunks --- package/component/.gitignore | 1 + package/component/package.json | 7 ++- package/component/script/build.esm.ts | 84 +++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 package/component/script/build.esm.ts diff --git a/package/component/.gitignore b/package/component/.gitignore index 5f9a72bb..3e2859f7 100644 --- a/package/component/.gitignore +++ b/package/component/.gitignore @@ -5,6 +5,7 @@ example/dist/ lib/ es/ umd/ +esm/ /types/ npm-debug.log* yarn-debug.log* diff --git a/package/component/package.json b/package/component/package.json index 93d01515..0eda84db 100644 --- a/package/component/package.json +++ b/package/component/package.json @@ -5,7 +5,7 @@ "license": "MIT", "description": "a component library for Vue 3 base on layui-vue", "homepage": "http://www.layui-vue.com", - "main": "es/index.js", + "main": "esm/index.js", "unpkg": "umd/index.js", "jsdelivr": "umd/index.js", "types": "types/index.d.ts", @@ -17,14 +17,15 @@ ], "exports": { ".": { - "import": "./es/index.js" + "import": "./esm/index.js" }, "./lib/": "./lib/", "./es/": "./es/" }, "scripts": { - "build": "npm run build:all && npm run build:es && npm run build:umd && npm run build:types", + "build": "npm run build:all && npm run build:es && npm run build:esm && npm run build:umd && npm run build:types", "build:es": "vite build --emptyOutDir --config ./script/build.es.ts", + "build:esm": "vite build --emptyOutDir --config ./script/build.esm.ts", "build:all": "vite build --emptyOutDir --config ./script/build.all.ts", "build:umd": "vite build --emptyOutDir --config ./script/build.umd.ts", "build:types": "rimraf types && tsc -d" diff --git a/package/component/script/build.esm.ts b/package/component/script/build.esm.ts new file mode 100644 index 00000000..c8afac29 --- /dev/null +++ b/package/component/script/build.esm.ts @@ -0,0 +1,84 @@ +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[] = [ + 'input', 'dropdown', 'carousel', 'transition', 'datePicker', 'header', + 'selectOption', 'skeletonItem', 'tabItem', 'upload' +]; + +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, + outDir: "esm", + lib: { + entry: resolve(process.cwd(), "./src/index.ts"), + formats: ["es"], + }, + rollupOptions: { + input: inputs, + output: { + globals: { + vue: "Vue", + }, + manualChunks(id) { + let arr = id.toString().split('/'); + if (arr.length >= 2) { + //if (arr.length >= 2 && arr[arr.length - 1].split('.')[1] != 'ts'){ + let entryPoint = arr[arr.length - 2].toString() + 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", + }, + external: ["vue", "vue-router"], + }, + }, + }; +};