Skip to content

Commit

Permalink
feat(css): support alias in css @imports
Browse files Browse the repository at this point in the history
close #650
  • Loading branch information
yyx990803 committed Jan 26, 2021
1 parent d8689b8 commit 82d87d9
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 15 deletions.
2 changes: 1 addition & 1 deletion packages/playground/css/linked.css
@@ -1,4 +1,4 @@
@import './linked-at-import.css';
@import '@/linked-at-import.css';

/* test postcss nesting */
.wrapper {
Expand Down
3 changes: 3 additions & 0 deletions packages/playground/css/vite.config.js
Expand Up @@ -2,6 +2,9 @@
* @type {import('vite').UserConfig}
*/
module.exports = {
alias: {
'@': __dirname
},
css: {
modules: {
generateScopedName: '[name]__[local]___[hash:base64:5]'
Expand Down
12 changes: 12 additions & 0 deletions packages/vite/src/node/config.ts
Expand Up @@ -26,6 +26,11 @@ import { createFilter } from '@rollup/pluginutils'
import { ResolvedBuildOptions } from '.'
import { parse as parseUrl } from 'url'
import { JsonOptions } from './plugins/json'
import {
createPluginContainer,
PluginContainer
} from './server/pluginContainer'
import aliasPlugin from '@rollup/plugin-alias'

const debug = createDebugger('vite:config')

Expand Down Expand Up @@ -147,6 +152,7 @@ export type ResolvedConfig = Readonly<
optimizeCacheDir: string | undefined
env: Record<string, any>
alias: Alias[]
aliasResolver: PluginContainer
plugins: readonly Plugin[]
server: ServerOptions
build: ResolvedBuildOptions
Expand Down Expand Up @@ -285,6 +291,7 @@ export async function resolveConfig(
isProduction,
optimizeCacheDir,
alias: resolvedAlias,
aliasResolver: null as any,
plugins: userPlugins,
server: config.server || {},
build: resolvedBuildOptions,
Expand All @@ -309,6 +316,11 @@ export async function resolveConfig(
postPlugins
)

resolved.aliasResolver = await createPluginContainer({
...resolved,
plugins: [aliasPlugin({ entries: config.alias })]
})

// call configResolved hooks
userPlugins.forEach((p) => {
if (p.configResolved) {
Expand Down
12 changes: 2 additions & 10 deletions packages/vite/src/node/optimizer/index.ts
Expand Up @@ -12,12 +12,8 @@ import {
resolveFrom,
writeFile
} from '../utils'
import {
createPluginContainer,
PluginContainer
} from '../server/pluginContainer'
import { PluginContainer } from '../server/pluginContainer'
import { tryNodeResolve } from '../plugins/resolve'
import aliasPlugin from '@rollup/plugin-alias'
import { createFilter } from '@rollup/pluginutils'
import { prompt } from 'enquirer'
import { build } from 'esbuild'
Expand Down Expand Up @@ -123,17 +119,13 @@ export async function optimizeDeps(
}

const options = config.optimizeDeps || {}
const aliasResolver = config.aliasResolver

// Determine deps to optimize. The goal is to only pre-bundle deps that falls
// under one of the following categories:
// 1. Has imports to relative files (e.g. lodash-es, lit-html)
// 2. Has imports to bare modules that are not in the project's own deps
// (i.e. esm that imports its own dependencies, e.g. styled-components)
// await init
const aliasResolver = await createPluginContainer({
...config,
plugins: [aliasPlugin({ entries: config.alias })]
})
const { qualified, external } = await resolveQualifiedDeps(
root,
config,
Expand Down
24 changes: 21 additions & 3 deletions packages/vite/src/node/plugins/css.ts
Expand Up @@ -32,6 +32,7 @@ import {
import { ViteDevServer } from '../'
import { assetUrlRE, urlToBuiltUrl } from './asset'
import MagicString from 'magic-string'
import { PluginContainer } from '../server/pluginContainer'

// const debug = createDebugger('vite:css')

Expand Down Expand Up @@ -124,7 +125,8 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
id,
raw,
config,
urlReplacer
urlReplacer,
config.aliasResolver
)
if (modules) {
moduleCache.set(id, modules)
Expand Down Expand Up @@ -326,7 +328,8 @@ async function compileCSS(
id: string,
code: string,
config: ResolvedConfig,
urlReplacer: CssUrlReplacer
urlReplacer: CssUrlReplacer,
aliasResolver: PluginContainer
): Promise<{
code: string
map?: SourceMap
Expand Down Expand Up @@ -404,7 +407,22 @@ async function compileCSS(
postcssConfig && postcssConfig.plugins ? postcssConfig.plugins.slice() : []

if (needInlineImport) {
postcssPlugins.unshift((await import('postcss-import')).default())
postcssPlugins.unshift(
(await import('postcss-import')).default({
async resolve(id, basedir) {
if (!id.startsWith('.')) {
const resolved = await aliasResolver.resolveId(
id,
path.join(basedir, '*')
)
if (resolved) {
return resolved.id
}
}
return id
}
})
)
}
postcssPlugins.push(
UrlRewritePostcssPlugin({
Expand Down
8 changes: 7 additions & 1 deletion packages/vite/types/shims.d.ts
Expand Up @@ -60,7 +60,13 @@ declare module 'postcss-load-config' {

declare module 'postcss-import' {
import { Plugin } from 'postcss'
const plugin: () => Plugin
const plugin: (options: {
resolve: (
id: string,
basedir: string,
importOptions: any
) => string | string[] | Promise<string | string[]>
}) => Plugin
export = plugin
}

Expand Down

0 comments on commit 82d87d9

Please sign in to comment.