From d3f0a3f07c7a3a76eacbf561cd7747469b5389a5 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 29 Dec 2021 11:29:22 +0800 Subject: [PATCH] fix: subpackages assets (#3123) --- packages/uni-cli-shared/src/json/pages.ts | 30 ++++++++++++++++++-- packages/vite-plugin-uni/src/plugins/copy.ts | 21 ++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/packages/uni-cli-shared/src/json/pages.ts b/packages/uni-cli-shared/src/json/pages.ts index cd911e679..b10a7538b 100644 --- a/packages/uni-cli-shared/src/json/pages.ts +++ b/packages/uni-cli-shared/src/json/pages.ts @@ -24,7 +24,13 @@ export function isUniPageSfcFile( ) { return isVueSfcFile(file) && isUniPageFile(file, inputDir) } - +/** + * 小程序平台慎用,因为该解析不支持 subpackages + * @param inputDir + * @param platform + * @param normalize + * @returns + */ export const parsePagesJson = ( inputDir: string, platform: UniApp.PLATFORM, @@ -36,7 +42,9 @@ export const parsePagesJson = ( } return parseJson(jsonStr, true) as UniApp.PagesJson } - +/** + * 该方法解析出来的是不支持 subpackages,会被合并入 pages + */ export const parsePagesJsonOnce = once(parsePagesJson) /** * 目前 App 和 H5 使用了该方法 @@ -147,7 +155,7 @@ function normalizeSubpackages( function normalizeSubpackageSubNVues( root: string, - style: UniApp.PagesJsonPageStyle + style: UniApp.PagesJsonPageStyle = { navigationBar: {} } ) { const platformStyle = style['app'] || style['app-plus'] if (!platformStyle) { @@ -438,3 +446,19 @@ function normalizePullToRefresh( ): UniApp.PageRefreshOptions | undefined { return pageStyle.pullToRefresh } + +function parseSubpackagesRoot(inputDir: string, platform: UniApp.PLATFORM) { + const pagesJson = parsePagesJson(inputDir, platform, false) + const subpackages = pagesJson.subPackages || pagesJson.subpackages + const roots: string[] = [] + if (isArray(subpackages)) { + subpackages.forEach(({ root }) => { + if (root) { + roots.push(root) + } + }) + } + return roots +} + +export const parseSubpackagesRootOnce = once(parseSubpackagesRoot) diff --git a/packages/vite-plugin-uni/src/plugins/copy.ts b/packages/vite-plugin-uni/src/plugins/copy.ts index a7080149d..fd203e11d 100644 --- a/packages/vite-plugin-uni/src/plugins/copy.ts +++ b/packages/vite-plugin-uni/src/plugins/copy.ts @@ -1,17 +1,33 @@ -import { Plugin } from 'vite' +import path from 'path' +import debug from 'debug' +import type { Plugin } from 'vite' import { PUBLIC_DIR, uniViteCopyPlugin, UniViteCopyPluginTarget, + parseSubpackagesRootOnce, + normalizePath, } from '@dcloudio/uni-cli-shared' import { VitePluginUniResolvedOptions } from '..' +const debugCopy = debug('vite:uni:copy') + export function uniCopyPlugin({ outputDir, copyOptions, }: Pick): Plugin { - const assets = [PUBLIC_DIR + '/**/*', 'uni_modules/*/' + PUBLIC_DIR + '/**/*'] + const staticDir = PUBLIC_DIR + '/**/*' + const uniModulesStaticDir = 'uni_modules/*/' + PUBLIC_DIR + '/**/*' + const assets = [staticDir, uniModulesStaticDir] + const subpackages = parseSubpackagesRootOnce( + process.env.UNI_INPUT_DIR, + process.env.UNI_PLATFORM + ) + subpackages.forEach((root) => { + assets.push(normalizePath(path.join(root, staticDir))) + assets.push(normalizePath(path.join(root, uniModulesStaticDir))) + }) copyOptions!.assets.forEach((asset) => { assets.push(asset) }) @@ -22,6 +38,7 @@ export function uniCopyPlugin({ }, ] targets.push(...copyOptions!.targets) + debugCopy(targets) return uniViteCopyPlugin({ targets, verbose: process.env.DEBUG ? true : false, -- GitLab