提交 ef535ea1 编写于 作者: fxy060608's avatar fxy060608

feat(app): support minify css

上级 b3cdc137
import path from 'path'
import debug from 'debug'
import { Plugin } from 'vite'
import { Plugin, ResolvedConfig } from 'vite'
import { normalizePath, resolveMainPathOnce } from '../../utils'
import { EXTNAME_VUE_RE } from '../../constants'
import { minifyCSS } from './vitejs/plugins/css'
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`
const cssLangRE = new RegExp(cssLangs)
......@@ -37,9 +38,12 @@ interface UniCssPluginOptions {
export function uniCssPlugin({ app }: UniCssPluginOptions): Plugin {
const styles: Map<string, string> = new Map<string, string>()
let cssChunks: Map<string, Set<string>>
let resolvedConfig: ResolvedConfig
return {
name: 'vite:uni-app-css',
configResolved(config) {
resolvedConfig = config
},
buildStart() {
cssChunks = new Map<string, Set<string>>()
},
......@@ -55,7 +59,7 @@ export function uniCssPlugin({ app }: UniCssPluginOptions): Plugin {
moduleSideEffects: 'no-treeshake',
}
},
generateBundle() {
async generateBundle() {
const findCssModuleIds = (
moduleId: string,
cssModuleIds?: Set<string>
......@@ -99,11 +103,15 @@ export function uniCssPlugin({ app }: UniCssPluginOptions): Plugin {
.join('\n')
}
for (const fileName of cssChunks.keys()) {
let source =
(fileName === 'app.css' ? app + '\n' : '') + genCssCode(fileName)
if (resolvedConfig.build.minify) {
source = await minifyCSS(source, resolvedConfig)
}
this.emitFile({
fileName,
type: 'asset',
source:
(fileName === 'app.css' ? app + '\n' : '') + genCssCode(fileName),
source,
})
}
},
......
import { ModuleNode, ViteDevServer as OrigViteDevServer } from 'vite'
export { ResolveFn } from 'vite'
export interface ViteDevServer extends OrigViteDevServer {
_globImporters: Record<
string,
{
module: ModuleNode
importGlobs: {
base: string
pattern: string
}[]
}
>
}
export { ResolveFn, ViteDevServer } from 'vite'
......@@ -724,13 +724,13 @@ async function compileCSS(
}
if (server) {
// register glob importers so we can trigger updates on file add/remove
if (!(id in server._globImporters)) {
server._globImporters[id] = {
if (!(id in (server as any)._globImporters)) {
;(server as any)._globImporters[id] = {
module: server.moduleGraph.getModuleById(id)!,
importGlobs: [],
}
}
server._globImporters[id].importGlobs.push({
;(server as any)._globImporters[id].importGlobs.push({
base: config.root,
pattern,
})
......@@ -882,8 +882,8 @@ async function doUrlReplace(
return `url(${wrap}${await replacer(rawUrl)}${wrap})`
}
async function minifyCSS(css: string, config: ResolvedConfig) {
// fixed by xxxxxx
export async function minifyCSS(css: string, config: ResolvedConfig) {
const { code, warnings } = await transform(css, {
loader: 'css',
minify: true,
......
{
"extends": "../../tsconfig.node.json",
"compilerOptions": {
"baseUrl": "./",
"outDir": "dist",
"paths": {
"types/alias": ["types/alias.d.ts"]
......
......@@ -83,6 +83,11 @@ export function initEnv(type: 'dev' | 'build', options: CliOptions) {
// process.exit(1)
// )
// }
if (process.env.NODE_ENV === 'production') {
if (!(options as BuildOptions).minify) {
;(options as BuildOptions).minify = 'terser'
}
}
if (process.env.UNI_PLATFORM === 'app') {
initNVueEnv()
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册