From ae2bdd5d394c2d6fb6e532a10937c335930bb692 Mon Sep 17 00:00:00 2001 From: sibbng Date: Wed, 30 Nov 2022 02:44:21 +0300 Subject: [PATCH] fix(transformer-directives,nuxt): revert `enforce: 'pre'`, disable `mergeRules` (#1930) * fix(transformer-directives,nuxt): revert `enforce: 'pre'`, disable `mergeRules` * fix build --- packages/config/src/index.ts | 5 +++-- packages/nuxt/package.json | 1 + packages/nuxt/src/index.ts | 22 +++++++++++++++++--- packages/shared-integration/src/context.ts | 2 +- packages/transformer-directives/src/index.ts | 2 +- pnpm-lock.yaml | 2 ++ 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index dfcbd3ed67..f2dafbe520 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -1,6 +1,6 @@ import { dirname, resolve } from 'path' import fs from 'fs' -import type { UserConfig } from '@unocss/core' +import type { UserConfig, UserConfigDefaults } from '@unocss/core' import type { LoadConfigResult, LoadConfigSource } from 'unconfig' import { createConfigLoader as createLoader } from 'unconfig' @@ -10,10 +10,11 @@ export async function loadConfig( cwd = process.cwd(), configOrPath: string | U = cwd, extraConfigSources: LoadConfigSource[] = [], + defaults: UserConfigDefaults = {}, ): Promise> { let inlineConfig = {} as U if (typeof configOrPath !== 'string') { - inlineConfig = configOrPath + inlineConfig = Object.assign({}, defaults, configOrPath) if (inlineConfig.configFile === false) { return { config: inlineConfig as U, diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 3876f1b78c..84ab777a37 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -42,6 +42,7 @@ }, "dependencies": { "@nuxt/kit": "^3.0.0", + "@unocss/config": "workspace:*", "@unocss/core": "workspace:*", "@unocss/preset-attributify": "workspace:*", "@unocss/preset-icons": "workspace:*", diff --git a/packages/nuxt/src/index.ts b/packages/nuxt/src/index.ts index 7d32164ea6..4afc430834 100644 --- a/packages/nuxt/src/index.ts +++ b/packages/nuxt/src/index.ts @@ -4,6 +4,8 @@ import { addComponentsDir, addPluginTemplate, defineNuxtModule, extendWebpackCon import WebpackPlugin from '@unocss/webpack' import VitePlugin from '@unocss/vite' import type { NuxtPlugin } from '@nuxt/schema' +import { loadConfig } from '@unocss/config' +import type { UserConfig } from '@unocss/core' import { resolveOptions } from './options' import type { UnocssNuxtOptions } from './types' @@ -28,7 +30,7 @@ export default defineNuxtModule({ icons: false, wind: false, }, - setup(options, nuxt) { + async setup(options, nuxt) { // preset shortcuts resolveOptions(options) @@ -56,9 +58,23 @@ export default defineNuxtModule({ }) } + const { config: unoConfig } = await loadConfig(process.cwd(), {}, [], options) + + if ( + nuxt.options.postcss.plugins.cssnano + && unoConfig.transformers?.some(t => t.name === 'css-directive' && t.enforce !== 'pre') + ) { + const preset = nuxt.options.postcss.plugins.cssnano.preset + nuxt.options.postcss.plugins.cssnano = { + preset: [preset?.[0] || 'default', Object.assign( + preset?.[1] || {}, { mergeRules: false }, + )], + } + } + nuxt.hook('vite:extend', ({ config }) => { config.plugins = config.plugins || [] - config.plugins.unshift(...VitePlugin({}, options)) + config.plugins.unshift(...VitePlugin(unoConfig)) }) // Nuxt 2 @@ -74,7 +90,7 @@ export default defineNuxtModule({ extendWebpackConfig((config) => { config.plugins = config.plugins || [] - config.plugins.unshift(WebpackPlugin({}, options)) + config.plugins.unshift(WebpackPlugin(unoConfig)) }) }, }) diff --git a/packages/shared-integration/src/context.ts b/packages/shared-integration/src/context.ts index 9d6a4127cd..0971c63f7a 100644 --- a/packages/shared-integration/src/context.ts +++ b/packages/shared-integration/src/context.ts @@ -28,7 +28,7 @@ export function createContext = UserConfig>( let ready = reloadConfig() async function reloadConfig() { - const result = await loadConfig(root, configOrPath, extraConfigSources) + const result = await loadConfig(root, configOrPath, extraConfigSources, defaults) resolveConfigResult(result) rawConfig = result.config diff --git a/packages/transformer-directives/src/index.ts b/packages/transformer-directives/src/index.ts index b1e88f2e17..0185d1d93e 100644 --- a/packages/transformer-directives/src/index.ts +++ b/packages/transformer-directives/src/index.ts @@ -37,7 +37,7 @@ export interface TransformerDirectivesContext { export default function transformerDirectives(options: TransformerDirectivesOptions = {}): SourceCodeTransformer { return { name: 'css-directive', - enforce: options?.enforce || 'pre', + enforce: options?.enforce, idFilter: id => !!id.match(cssIdRE), transform: (code, id, ctx) => { return transformDirectives(code, ctx.uno, options, id) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22e3a7171d..0f8d9da258 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -371,6 +371,7 @@ importers: specifiers: '@nuxt/kit': ^3.0.0 '@nuxt/schema': ^3.0.0 + '@unocss/config': workspace:* '@unocss/core': workspace:* '@unocss/preset-attributify': workspace:* '@unocss/preset-icons': workspace:* @@ -385,6 +386,7 @@ importers: unocss: workspace:* dependencies: '@nuxt/kit': 3.0.0 + '@unocss/config': link:../config '@unocss/core': link:../core '@unocss/preset-attributify': link:../preset-attributify '@unocss/preset-icons': link:../preset-icons