From 3f0adf5dbe2cd25f8b2ad110cc9e384412d7cc60 Mon Sep 17 00:00:00 2001 From: acyza <101238421+acyza@users.noreply.github.com> Date: Sat, 15 Apr 2023 11:30:07 +0800 Subject: [PATCH] fix pnpm build:ui (#116) --- .eslintignore | 4 +- .gitignore | 1 + internals/cli/src/commands/build/build-ui.ts | 64 +++++++++++--------- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/.eslintignore b/.eslintignore index 295562c16..bebea95a1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,4 +3,6 @@ runtime dist-vue2/ dist-vue3/ node_modules -examples/docs/public/assets/map/js \ No newline at end of file +examples/docs/public/assets/map/js +packages/dist2 +packages/dist3 \ No newline at end of file diff --git a/.gitignore b/.gitignore index d1a06b600..8df4f6976 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ dist3/ allDist/ packages/**/runtime coverage/ +esbuild-kit/ /packages/vue-icon-saas/src /packages/vue-icon-saas/index.ts diff --git a/internals/cli/src/commands/build/build-ui.ts b/internals/cli/src/commands/build/build-ui.ts index 5ea8f018a..ac7483e29 100644 --- a/internals/cli/src/commands/build/build-ui.ts +++ b/internals/cli/src/commands/build/build-ui.ts @@ -7,7 +7,8 @@ import dtsPlugin from 'vite-plugin-dts' import vue3SvgPlugin from 'vite-svg-loader' import { getAlias, pathFromWorkspaceRoot } from '../../config/vite.js' import * as config from '../../shared/config.js' -import { getAllIcons, getAllModules, getByName, Module } from '../../shared/module-utils.js' +import type { Module } from '../../shared/module-utils.js' +import { getAllIcons, getAllModules, getByName } from '../../shared/module-utils.js' import * as utils from '../../shared/utils.js' import generatePackageJsonPlugin from './rollup/generate-package-json.js' import inlineChunksPlugin from './rollup/inline-chunks.js' @@ -63,33 +64,33 @@ export const getBaseConfig = ({ vueVersion, dtsInclude, dts, buildTarget, themeV ...getVuePlugins(vueVersion), dts ? dtsPlugin({ - root: pathFromWorkspaceRoot(), - tsConfigFilePath: `tsconfig.vue${vueVersion}.json`, - aliasesExclude: [/@opentiny\/vue.+/], - compilerOptions: { - paths: { - ...compilerOptions.paths, - // 一定要映射到 packages/vue 下对应的 vue 版本和 @vue/composition-api 才能正确生成 dts - 'vue': [`packages/vue/node_modules/vue${vueVersion}`], - '@vue/runtime-core': ['packages/vue/node_modules/@vue/runtime-core'], - '@vue/runtime-dom': ['packages/vue/node_modules/@vue/runtime-dom'], - '@vue/composition-api': ['packages/vue/node_modules/@vue/composition-api'] - } - }, - include: [...dtsInclude, 'packages/vue/*.d.ts'], - // 忽略类型检查错误,保证生成不会阻断 - skipDiagnostics: true, - beforeWriteFile: (filePath, content) => { - return { - // "vue/src/alert/index.d.ts" ==> "alert/index.d.ts" - filePath: filePath.replace('/vue/src', '').replace('\\vue\\src', ''), - content: content - // vue 2.7 还不能正常识别 vue-common - .replace(/import\('[./]+vue-common.+'\)/, 'import("vue")') - .replace(/\("vue[1-9\.]+/g, '("vue') - } + root: pathFromWorkspaceRoot(), + tsConfigFilePath: `tsconfig.vue${vueVersion}.json`, + aliasesExclude: [/@opentiny\/vue.+/], + compilerOptions: { + paths: { + ...compilerOptions.paths, + // 一定要映射到 packages/vue 下对应的 vue 版本和 @vue/composition-api 才能正确生成 dts + 'vue': [`packages/vue/node_modules/vue${vueVersion}`], + '@vue/runtime-core': ['packages/vue/node_modules/@vue/runtime-core'], + '@vue/runtime-dom': ['packages/vue/node_modules/@vue/runtime-dom'], + '@vue/composition-api': ['packages/vue/node_modules/@vue/composition-api'] } - }) + }, + include: [...dtsInclude, 'packages/vue/*.d.ts'], + // 忽略类型检查错误,保证生成不会阻断 + skipDiagnostics: true, + beforeWriteFile: (filePath, content) => { + return { + // "vue/src/alert/index.d.ts" ==> "alert/index.d.ts" + filePath: filePath.replace('/vue/src', '').replace('\\vue\\src', ''), + content: content + // vue 2.7 还不能正常识别 vue-common + .replace(/import\('[./]+vue-common.+'\)/, 'import("vue")') + .replace(/\("vue[1-9\.]+/g, '("vue') + } + } + }) : undefined, inlineChunksPlugin({ deleteInlinedFiles: true }), generatePackageJsonPlugin({ @@ -189,6 +190,9 @@ async function batchBuildAll({ vueVersion, tasks, formats, message, emptyOutDir, if (tasks.length === 0) return utils.logGreen(`====== 开始构建 ${message} ======`) const entry = toEntry(tasks) + + const entryPathSet = new Set(Object.values(entry)) + const dtsInclude = toTsInclude(tasks) await build({ configFile: false, @@ -208,6 +212,12 @@ async function batchBuildAll({ vueVersion, tasks, formats, message, emptyOutDir, return false } + // 模块作为入口时不需要通过external分离 + const srcPath = path.resolve(importer, '..', source.split('?')[0]) + if (entryPathSet.has(srcPath)) { + return false + } + // 图标入口排除子图标 if (/vue-icon\/(index|lowercase)/.test(importer)) { return /^\.\//.test(source)