diff --git a/src/core/transformPlugin.ts b/src/core/transformPlugin.ts index 6d931c0..79fd8eb 100644 --- a/src/core/transformPlugin.ts +++ b/src/core/transformPlugin.ts @@ -7,6 +7,7 @@ import { camelize, genSideEffectsImport, toRegExp } from '../utils' import type { TransformOptions } from '../types' interface PluginOptions extends TransformOptions { + layers: string[] sourcemap?: NuxtOptions['sourcemap']['client'] transformStyles: (name: string) => undefined | string } @@ -16,12 +17,15 @@ const componentsRegExp = const importsRegExp = toRegExp(Object.keys(allImportsWithStyle), 'g') export const transformPlugin = createUnplugin((options: PluginOptions) => { - const { include, exclude, transformStyles } = options + const { layers, include, exclude, transformStyles } = options return { name: `${libraryName}:transform`, enforce: 'post', transformInclude (id) { + if (layers.some(layer => id.startsWith(layer))) { + return true + } if (exclude.some(pattern => id.match(pattern))) { return false } diff --git a/src/module.ts b/src/module.ts index 6743af9..5156760 100644 --- a/src/module.ts +++ b/src/module.ts @@ -9,16 +9,22 @@ import { localePlugin, transformPlugin } from './core/index' +import { getLayersDir } from './utils' import type { ModuleOptions } from './types' export type { ModuleOptions } from './types' export default defineNuxtModule({ meta: { name: libraryName, - configKey: libraryName + configKey: libraryName, + compatibility: { + nuxt: '>=3' + } }, defaults, setup (options, nuxt) { + const layers = getLayersDir(nuxt.options._layers) + resolveOptions() nuxt.options.imports.autoImport !== false && resolveImports(options) nuxt.options.components !== false && resolveComponents(options) @@ -30,6 +36,7 @@ export default defineNuxtModule({ config.plugins = config.plugins || [] config.plugins.push( transformPlugin.vite({ + layers, include: options.include, exclude: options.exclude, sourcemap: nuxt.options.sourcemap[mode], @@ -52,6 +59,7 @@ export default defineNuxtModule({ config.plugins = config.plugins || [] config.plugins.push( transformPlugin.webpack({ + layers, include: options.include, exclude: options.exclude, sourcemap: nuxt.options.sourcemap[mode], diff --git a/src/utils.ts b/src/utils.ts index b44c9ef..0e8caba 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,19 @@ +import type { NuxtConfigLayer } from '@nuxt/schema' +import { libraryName } from './config' + +export function getLayersDir (layers: NuxtConfigLayer[]) { + const list = [] + + for (const layer of layers) { + const srcDir = layer.config.srcDir || layer.cwd + if (srcDir.includes('node_modules') && layer.config[libraryName]?.importStyle !== false) { + list.push(srcDir) + } + } + + return list +} + export function isObject (value: unknown): value is Record { return value !== null && typeof value === 'object' } @@ -5,7 +21,7 @@ export function isObject (value: unknown): value is Record { export function toArray ( value: T ): T extends any[] ? T : T[] { - return Array.isArray(value) ? value : ([value] as any) + return (Array.isArray(value) ? value : [value]) as any } export function toRegExp (arr: string[], flags?: string): RegExp {