diff --git a/packages/uni-cli-shared/src/uni_modules.ts b/packages/uni-cli-shared/src/uni_modules.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdadc53246791c6967933014429cb7515f1c3589 --- /dev/null +++ b/packages/uni-cli-shared/src/uni_modules.ts @@ -0,0 +1,134 @@ +import path from 'path' +import fs from 'fs-extra' +import { isArray, isPlainObject, isString } from '@vue/shared' +import { recursive } from 'merge' +import { parseJson } from './json' + +type Define = string | string[] | Record +type Defines = { + [name: string]: Define +} + +interface Exports { + [name: string]: Define | Defines | false +} + +export function genUniModulesExports() { + const uniModulesDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules') + if (!fs.existsSync(uniModulesDir)) { + return '' + } + const importCodes: string[] = [] + const assignCodes: string[] = [] + fs.readdirSync(uniModulesDir).forEach((uniModuleDir) => { + const pkgPath = path.resolve(uniModulesDir, uniModuleDir, 'package.json') + if (!fs.existsSync(pkgPath)) { + return + } + const exports = parseJson(fs.readFileSync(pkgPath, 'utf8'))?.uni_modules + ?.exports as Exports | undefined + if (exports) { + const [exportsImportCodes, exportsAssignCodes] = parseExports( + process.env.UNI_PLATFORM === 'h5' ? 'web' : process.env.UNI_PLATFORM, + `@/uni_modules/${uniModuleDir}`, + exports + ) + importCodes.push(...exportsImportCodes) + assignCodes.push(...exportsAssignCodes) + } + }) + if (!importCodes.length) { + return '' + } + return `${importCodes.join('\n')} +${assignCodes.join('\n')}` +} + +export function parseExports( + platform: UniApp.PLATFORM, + source: string, + exports: Exports = {} +): [string[], string[]] { + const rootDefines: Defines = {} + Object.keys(exports).forEach((name) => { + if (name.startsWith('uni')) { + rootDefines[name] = exports[name] as Define + } + }) + const platformDefines = exports[platform] as false | Defines + // 该平台不支持 + if (platformDefines === false) { + return [[], []] + } + return parseDefines(source, recursive(true, rootDefines, platformDefines)) +} + +export function parseDefines( + source: string, + defines: Defines = {} +): [string[], string[]] { + const importCodes: string[] = [] + const assignCodes: string[] = [] + Object.keys(defines).forEach((name) => { + const [defineImportCodes, defineAssignCodes] = parseDefine( + source, + name, + defines[name] + ) + importCodes.push(...defineImportCodes) + assignCodes.push(...defineAssignCodes) + }) + return [importCodes, assignCodes] +} +/** + * uni:'getBatteryInfo' + * import getBatteryInfo from '..' + * + * uni:['getBatteryInfo'] + * import { getBatteryInfo } from '..' + * + * uni:['openLocation','chooseLocation'] + * import { openLocation, chooseLocation } from '..' + * + * uni:{ + * onUserCaptureScreen: "onCaptureScreen" + * offUserCaptureScreen: "offCaptureScreen" + * } + * + * uni.getBatteryInfo = getBatteryInfo + * @param source + * @param globalObject + * @param define + * @returns + */ +function parseDefine( + source: string, + globalObject: string, + define: Define +): [string[], string[]] { + const importCodes: string[] = [] + const assignCodes: string[] = [] + if (isString(define)) { + importCodes.push(`import ${define} from '${source}'`) + assignCodes.push(`${globalObject}.${define} = ${define}`) + } else if (isArray(define)) { + importCodes.push(`import { ${define.join(', ')} } from '${source}'`) + define.forEach((d) => { + assignCodes.push(`${globalObject}.${d} = ${d}`) + }) + } else if (isPlainObject(define)) { + const keys = Object.keys(define) + const specifiers: string[] = [] + + keys.forEach((d) => { + if (d !== define[d]) { + specifiers.push(`${define[d]} as ${d}`) + } else { + specifiers.push(d) + } + assignCodes.push(`${globalObject}.${d} = ${d}`) + }) + importCodes.push(`import { ${specifiers.join(', ')} } from '${source}'`) + } + return [importCodes, assignCodes] +} diff --git a/packages/uni-cli-shared/src/vite/plugins/uniModules.ts b/packages/uni-cli-shared/src/vite/plugins/uniModules.ts index 234af8c2d682f91613c19b0c22252e5fd234369d..028e3c9bbb302fba2cfbd52880c6a014aac61391 100644 --- a/packages/uni-cli-shared/src/vite/plugins/uniModules.ts +++ b/packages/uni-cli-shared/src/vite/plugins/uniModules.ts @@ -1,10 +1,6 @@ -import path from 'path' -import fs from 'fs-extra' import type { Plugin } from 'vite' -import { recursive } from 'merge' -import { isArray, isPlainObject, isString } from '@vue/shared' import { UNI_MODULES_EXPORTS } from '../../constants' -import { parseJson } from '../../json' +import { genUniModulesExports } from '../../uni_modules' export function uniModulesExportsPlugin({ enable, @@ -30,132 +26,3 @@ export function uniModulesExportsPlugin({ }, } } - -type Define = string | string[] | Record -type Defines = { - [name: string]: Define -} - -interface Exports { - [name: string]: Define | Defines | false -} - -function genUniModulesExports() { - const uniModulesDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules') - if (!fs.existsSync(uniModulesDir)) { - return '' - } - const importCodes: string[] = [] - const assignCodes: string[] = [] - fs.readdirSync(uniModulesDir).forEach((uniModuleDir) => { - const pkgPath = path.resolve(uniModulesDir, uniModuleDir, 'package.json') - if (!fs.existsSync(pkgPath)) { - return - } - const exports = parseJson(fs.readFileSync(pkgPath, 'utf8'))?.uni_modules - ?.exports as Exports | undefined - if (exports) { - const [exportsImportCodes, exportsAssignCodes] = parseExports( - process.env.UNI_PLATFORM === 'h5' ? 'web' : process.env.UNI_PLATFORM, - `@/uni_modules/${uniModuleDir}`, - exports - ) - importCodes.push(...exportsImportCodes) - assignCodes.push(...exportsAssignCodes) - } - }) - if (!importCodes.length) { - return '' - } - return `${importCodes.join('\n')} -${assignCodes.join('\n')}` -} - -export function parseExports( - platform: UniApp.PLATFORM, - source: string, - exports: Exports = {} -): [string[], string[]] { - const rootDefines: Defines = {} - Object.keys(exports).forEach((name) => { - if (name.startsWith('uni')) { - rootDefines[name] = exports[name] as Define - } - }) - const platformDefines = exports[platform] as false | Defines - // 该平台不支持 - if (platformDefines === false) { - return [[], []] - } - return parseDefines(source, recursive(true, rootDefines, platformDefines)) -} - -export function parseDefines( - source: string, - defines: Defines = {} -): [string[], string[]] { - const importCodes: string[] = [] - const assignCodes: string[] = [] - Object.keys(defines).forEach((name) => { - const [defineImportCodes, defineAssignCodes] = parseDefine( - source, - name, - defines[name] - ) - importCodes.push(...defineImportCodes) - assignCodes.push(...defineAssignCodes) - }) - return [importCodes, assignCodes] -} -/** - * uni:'getBatteryInfo' - * import getBatteryInfo from '..' - * - * uni:['getBatteryInfo'] - * import { getBatteryInfo } from '..' - * - * uni:['openLocation','chooseLocation'] - * import { openLocation, chooseLocation } from '..' - * - * uni:{ - * onUserCaptureScreen: "onCaptureScreen" - * offUserCaptureScreen: "offCaptureScreen" - * } - * - * uni.getBatteryInfo = getBatteryInfo - * @param source - * @param globalObject - * @param define - * @returns - */ -function parseDefine( - source: string, - globalObject: string, - define: Define -): [string[], string[]] { - const importCodes: string[] = [] - const assignCodes: string[] = [] - if (isString(define)) { - importCodes.push(`import ${define} from '${source}'`) - assignCodes.push(`${globalObject}.${define} = ${define}`) - } else if (isArray(define)) { - importCodes.push(`import { ${define.join(', ')} } from '${source}'`) - define.forEach((d) => { - assignCodes.push(`${globalObject}.${d} = ${d}`) - }) - } else if (isPlainObject(define)) { - const keys = Object.keys(define) - const specifiers: string[] = [] - - keys.forEach((d) => { - if (d !== define[d]) { - specifiers.push(`${define[d]} as ${d}`) - } else { - specifiers.push(d) - } - assignCodes.push(`${globalObject}.${d} = ${d}`) - }) - importCodes.push(`import { ${specifiers.join(', ')} } from '${source}'`) - } - return [importCodes, assignCodes] -} diff --git a/packages/uts-darwin-arm64/uts.darwin-arm64.node b/packages/uts-darwin-arm64/uts.darwin-arm64.node index 11dfdd777dbe0968698e87fffdc13ebafd043223..c4f5ae05b89006f80a805d2637b0c500623392f6 100755 Binary files a/packages/uts-darwin-arm64/uts.darwin-arm64.node and b/packages/uts-darwin-arm64/uts.darwin-arm64.node differ diff --git a/packages/uts-darwin-x64/uts.darwin-x64.node b/packages/uts-darwin-x64/uts.darwin-x64.node index 0fa7559448076dc983a941b289c8356d2683497f..58b1c980490463e9008a3b5bf4271bf8acc919f6 100755 Binary files a/packages/uts-darwin-x64/uts.darwin-x64.node and b/packages/uts-darwin-x64/uts.darwin-x64.node differ diff --git a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node index dbdfe723556b2455159eebf4530abbd5f23f6ef5..6881fdfa2232adc6d598f0121919b690d344d842 100644 Binary files a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node and b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node differ diff --git a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node index ff9babada130723d428c9a6331ce57c87de4d1f6..4c7fb5a4fe51b57a96aefe2b59744c13809b0b7b 100644 Binary files a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node and b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node differ