Skip to content

Commit

Permalink
fix(mp): Compatible with unocss@^0.47.0 (#4061)
Browse files Browse the repository at this point in the history
  • Loading branch information
fxy060608 committed Dec 21, 2022
1 parent be0a1ae commit 18331b0
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 54 deletions.
60 changes: 12 additions & 48 deletions packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,7 @@ import glob from 'fast-glob'
import colors from 'picocolors'
import postcssrc from 'postcss-load-config'
import { dataToEsm } from '@rollup/pluginutils'
import {
ExistingRawSourceMap,
PluginContext,
RollupError,
SourceMapInput,
} from 'rollup'
import { ExistingRawSourceMap, RollupError, SourceMapInput } from 'rollup'
import { RawSourceMap } from '@ampproject/remapping'
import type * as PostCSS from 'postcss'
import {
Expand Down Expand Up @@ -37,7 +32,6 @@ import type Stylus from 'stylus'
import type Less from 'less'
import type { Alias } from 'types/alias'
import { preCss, preNVueCss } from '../../../../preprocess'
import { PAGES_JSON_JS } from '../../../../constants'
import { emptyCssComments } from '../cleanString'
import { isArray, isFunction, isString } from '@vue/shared'
// const debug = createDebugger('vite:css')
Expand Down Expand Up @@ -189,39 +183,6 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
}
}

function findCssModuleIds(
this: PluginContext,
moduleId: string,
cssModuleIds?: Set<string>,
seen?: Set<string>
) {
if (!cssModuleIds) {
cssModuleIds = new Set<string>()
}
if (!seen) {
seen = new Set<string>()
}
if (seen.has(moduleId)) {
return cssModuleIds
}
seen.add(moduleId)
const moduleInfo = this.getModuleInfo(moduleId)
if (moduleInfo) {
moduleInfo.importedIds.forEach((id) => {
if (id.includes(PAGES_JSON_JS)) {
// 查询main.js时,需要忽略pages.json.js,否则会把所有页面样式加进来
return
}
if (cssLangRE.test(id) && !commonjsProxyRE.test(id)) {
cssModuleIds!.add(id)
} else {
findCssModuleIds.call(this, id, cssModuleIds, seen)
}
})
}
return cssModuleIds
}

/**
* Plugin applied after user plugins
*/
Expand All @@ -240,11 +201,11 @@ export function cssPostPlugin(
): Plugin {
// styles initialization in buildStart causes a styling loss in watch
const styles: Map<string, string> = new Map<string, string>()
let cssChunks: Map<string, Set<string>>
let cssChunks: Map<string, string[]>
return {
name: 'vite:css-post',
buildStart() {
cssChunks = new Map<string, Set<string>>()
cssChunks = new Map<string, string[]>()
},
async transform(css, id) {
if (!cssLangRE.test(id) || commonjsProxyRE.test(id)) {
Expand All @@ -264,15 +225,18 @@ export function cssPostPlugin(
moduleSideEffects: 'no-treeshake',
}
},

async generateBundle() {
const moduleIds = Array.from(this.getModuleIds())
moduleIds.forEach((id) => {
async renderChunk(_code, chunk, _opts) {
const id = chunk.facadeModuleId
if (id) {
const filename = chunkCssFilename(id)
if (filename) {
cssChunks.set(filename, findCssModuleIds.call(this, id))
const ids = Object.keys(chunk.modules).filter((id) => styles.has(id))
cssChunks.set(filename, ids)
}
})
}
return null
},
async generateBundle() {
if (!cssChunks.size) {
return
}
Expand Down
19 changes: 13 additions & 6 deletions packages/uni-mp-vite/src/plugin/configResolved.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,19 @@ export function createConfigResolved({
fixUnocss(config)
injectCssPlugin(config)

const unocssGlobalBuildGenerateIndex = config.plugins.findIndex(
(p) => p.name === 'unocss:global:build:generate'
let unocssGlobalBuildBundleIndex = config.plugins.findIndex(
(p) => p.name === 'unocss:global:build:bundle'
)
const hasUnocssGlobalBuildGenerate = unocssGlobalBuildGenerateIndex > -1

if (unocssGlobalBuildBundleIndex === -1) {
unocssGlobalBuildBundleIndex = config.plugins.findIndex(
(p) => p.name === 'unocss:global:build:generate'
)
}

const hasUnocssGlobalBuildBundle = unocssGlobalBuildBundleIndex > -1
// unocss 是根据 .css 后缀来编译文件,需要先保持 css 文件后缀为 .css,等 unocss 处理完后,再重置回正确的文件后缀
const cssExtname = hasUnocssGlobalBuildGenerate ? '.css' : extname
const cssExtname = hasUnocssGlobalBuildBundle ? '.css' : extname
injectCssPostPlugin(
config,
cssPostPlugin(config, {
Expand Down Expand Up @@ -109,9 +116,9 @@ export function createConfigResolved({
)
injectAssetPlugin(config)

if (hasUnocssGlobalBuildGenerate && extname !== '.css') {
if (hasUnocssGlobalBuildBundle && extname !== '.css') {
;(config.plugins as Plugin[]).splice(
unocssGlobalBuildGenerateIndex + 1,
unocssGlobalBuildBundleIndex + 1,
0,
adjustCssExtname(extname)
)
Expand Down

0 comments on commit 18331b0

Please sign in to comment.