From 4b6505e20ae0c12ec5b4007baa44b5c2e8fa81c7 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 27 Apr 2021 21:39:39 +0800 Subject: [PATCH] feat(easycom): support uni_modules --- packages/vite-plugin-uni/src/config/build.ts | 3 +- packages/vite-plugin-uni/src/config/css.ts | 14 ++++++- .../src/configResolved/plugins/cssScoped.ts | 2 +- .../src/configureServer/easycom.ts | 17 +-------- packages/vite-plugin-uni/src/utils/easycom.ts | 37 ++++++++++++++++++- 5 files changed, 53 insertions(+), 20 deletions(-) diff --git a/packages/vite-plugin-uni/src/config/build.ts b/packages/vite-plugin-uni/src/config/build.ts index 4258eee39..154ef1ae9 100644 --- a/packages/vite-plugin-uni/src/config/build.ts +++ b/packages/vite-plugin-uni/src/config/build.ts @@ -2,12 +2,13 @@ import path from 'path' import slash from 'slash' import { UserConfig } from 'vite' import { VitePluginUniResolvedOptions } from '..' -import { FEATURE_DEFINES } from '../utils' +import { FEATURE_DEFINES, initEasycoms } from '../utils' export function createBuild( options: VitePluginUniResolvedOptions, features: FEATURE_DEFINES ): UserConfig['build'] { + initEasycoms(options.inputDir) return { polyfillDynamicImport: features.__UNI_FEATURE_PAGES__, rollupOptions: { diff --git a/packages/vite-plugin-uni/src/config/css.ts b/packages/vite-plugin-uni/src/config/css.ts index 4c3f8c432..b6a14afb3 100644 --- a/packages/vite-plugin-uni/src/config/css.ts +++ b/packages/vite-plugin-uni/src/config/css.ts @@ -1,8 +1,18 @@ +import path from 'path' +import fs from 'fs-extra' import { UserConfig } from 'vite' import autoprefixer from 'autoprefixer' import { VitePluginUniResolvedOptions } from '..' import { uniapp } from '../utils' +function resolveAdditionalData(inputDir: string) { + const uniScssFile = path.resolve(inputDir, 'uni.scss') + if (!fs.existsSync(uniScssFile)) { + return '' + } + return fs.readFileSync(uniScssFile, 'utf8') +} + export function createCss( options: VitePluginUniResolvedOptions ): UserConfig['css'] { @@ -14,7 +24,9 @@ export function createCss( ], }, preprocessorOptions: { - scss: {}, + scss: { + additionalData: resolveAdditionalData(options.inputDir), + }, }, } } diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/cssScoped.ts b/packages/vite-plugin-uni/src/configResolved/plugins/cssScoped.ts index 1fd58e80a..e8285491b 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/cssScoped.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/cssScoped.ts @@ -8,7 +8,7 @@ import { UniPluginFilterOptions } from '.' const debugScoped = debug('uni:scoped') -const SCOPED_RE = /]*scoped[^>]*>/gi +const SCOPED_RE = /]*scoped[^>]*>/i function addScoped(code: string) { if (SCOPED_RE.test(code)) { diff --git a/packages/vite-plugin-uni/src/configureServer/easycom.ts b/packages/vite-plugin-uni/src/configureServer/easycom.ts index 5033c621a..859509bbd 100644 --- a/packages/vite-plugin-uni/src/configureServer/easycom.ts +++ b/packages/vite-plugin-uni/src/configureServer/easycom.ts @@ -1,21 +1,6 @@ -import path from 'path' import { ViteDevServer } from 'vite' - import { VitePluginUniResolvedOptions } from '..' -import { debugEasycom, initEasycom } from '../utils' - -function initEasycoms(inputDir: string) { - const dirs = ['components'].map((dir) => path.resolve(inputDir, dir)) - const easycomOptions = { dirs, rootDir: inputDir } - initEasycom(easycomOptions) - debugEasycom(easycomOptions) - return { - dirs, - refresh() { - initEasycom(easycomOptions) - }, - } -} +import { initEasycoms } from '../utils' export const serveEasycom = ( server: ViteDevServer, diff --git a/packages/vite-plugin-uni/src/utils/easycom.ts b/packages/vite-plugin-uni/src/utils/easycom.ts index 542f77a2a..14915c9cc 100644 --- a/packages/vite-plugin-uni/src/utils/easycom.ts +++ b/packages/vite-plugin-uni/src/utils/easycom.ts @@ -31,7 +31,42 @@ function clearEasycom() { easycomsInvalidCache.clear() } -export function initEasycom({ +export function initEasycoms(inputDir: string) { + const dirs = ['components'] + .map((dir) => path.resolve(inputDir, dir)) + .concat(initUniModulesEasycomDirs(inputDir)) + const easycomOptions = { dirs, rootDir: inputDir } + initEasycom(easycomOptions) + debugEasycom(easycomOptions) + return { + dirs, + refresh() { + initEasycom(easycomOptions) + }, + } +} + +function initUniModulesEasycomDirs(inputDir: string) { + const uniModulesDir = path.resolve(inputDir, 'uni_modules') + if (!fs.existsSync(uniModulesDir)) { + return [] + } + return fs + .readdirSync(uniModulesDir) + .map((uniModuleDir) => { + const uniModuleComponentsDir = path.resolve( + uniModulesDir, + uniModuleDir, + 'components' + ) + if (fs.existsSync(uniModuleComponentsDir)) { + return uniModuleComponentsDir + } + }) + .filter(Boolean as any) +} + +function initEasycom({ dirs, rootDir, custom, -- GitLab