From a0618b9e7d0948a9410a9649c8b27472f85ef6af Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 24 Jan 2022 16:21:31 +0800 Subject: [PATCH] wip(app): nvue styler --- packages/uni-app-vite/package.json | 1 + packages/uni-app-vite/src/nvue/plugin/index.ts | 15 +++++++++++---- .../uni-app-vite/src/nvue/plugins/esbuild.ts | 10 ++++------ .../uni-app-vite/src/plugin/configResolved.ts | 2 +- .../src/vite/plugins/vitejs/plugins/css.ts | 5 ++++- .../uni-cli-shared/src/vite/utils/plugin.ts | 5 ++++- .../uni-nvue-styler/__tests__/normalize.spec.ts | 6 +++--- .../__tests__/objectifier.spec.ts | 6 +++--- packages/uni-nvue-styler/src/parse.ts | 17 +++++++++++------ pnpm-lock.yaml | 2 ++ 10 files changed, 44 insertions(+), 25 deletions(-) diff --git a/packages/uni-app-vite/package.json b/packages/uni-app-vite/package.json index dcbb4cf67..0bb66e8f8 100644 --- a/packages/uni-app-vite/package.json +++ b/packages/uni-app-vite/package.json @@ -21,6 +21,7 @@ "dependencies": { "@dcloudio/uni-cli-shared": "3.0.0-alpha-3030820220114006", "@dcloudio/uni-i18n": "3.0.0-alpha-3030820220114006", + "@dcloudio/uni-nvue-styler": "workspace:*", "@dcloudio/uni-shared": "3.0.0-alpha-3030820220114006", "@rollup/pluginutils": "^4.1.2", "@vitejs/plugin-vue": "^2.0.1", diff --git a/packages/uni-app-vite/src/nvue/plugin/index.ts b/packages/uni-app-vite/src/nvue/plugin/index.ts index 258be9053..05b552d25 100644 --- a/packages/uni-app-vite/src/nvue/plugin/index.ts +++ b/packages/uni-app-vite/src/nvue/plugin/index.ts @@ -1,3 +1,5 @@ +import type { PreRenderedChunk } from 'rollup' +import type { Plugin } from 'vite' import path from 'path' import { createTransformTag, @@ -8,8 +10,7 @@ import { removeExt, resolveMainPathOnce, } from '@dcloudio/uni-cli-shared' -import { PreRenderedChunk } from 'rollup' -import { Plugin } from 'vite' +import { parse } from '@dcloudio/uni-nvue-styler' import { nvueOutDir } from '../../utils' import { transformRenderWhole } from './transforms/transformRenderWhole' import { transformAppendAsTree } from './transforms/transformAppendAsTree' @@ -83,8 +84,14 @@ export function uniAppNVuePlugin(): Plugin { return normalizeCssChunkFilename(id) } }, - chunkCssCode(_, cssCode) { - return 'export default {}' + async chunkCssCode(filename, cssCode) { + const { code, messages } = await parse(cssCode, { filename }) + messages.forEach((msg) => { + if (msg.type === 'warning' || msg.type === 'error') { + console.warn(msg.text) + } + }) + return `export default ${code}` }, }), } diff --git a/packages/uni-app-vite/src/nvue/plugins/esbuild.ts b/packages/uni-app-vite/src/nvue/plugins/esbuild.ts index 438efeb9f..402010e68 100644 --- a/packages/uni-app-vite/src/nvue/plugins/esbuild.ts +++ b/packages/uni-app-vite/src/nvue/plugins/esbuild.ts @@ -38,13 +38,11 @@ export function uniEsbuildPlugin(): Plugin { } }) debugEsbuild('start', entryPoints.length, entryPoints) - await Promise.all( - entryPoints.map((filename) => { - return buildNVuePage(filename, buildOptions).then((code) => { - return fs.outputFile(path.resolve(outputDir, filename), code) - }) + for (const filename of entryPoints) { + await buildNVuePage(filename, buildOptions).then((code) => { + return fs.outputFile(path.resolve(outputDir, filename), code) }) - ) + } debugEsbuild('end') }, } diff --git a/packages/uni-app-vite/src/plugin/configResolved.ts b/packages/uni-app-vite/src/plugin/configResolved.ts index cd577a946..7d88e08e4 100644 --- a/packages/uni-app-vite/src/plugin/configResolved.ts +++ b/packages/uni-app-vite/src/plugin/configResolved.ts @@ -8,7 +8,7 @@ import { export function createConfigResolved(options: { chunkCssFilename: (id: string) => string | void - chunkCssCode: (filename: string, cssCode: string) => string + chunkCssCode: (filename: string, cssCode: string) => string | Promise }): Plugin['configResolved'] { return (config) => { injectCssPlugin(config) diff --git a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts index 8eb9a28fe..64916459d 100644 --- a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts +++ b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts @@ -220,7 +220,10 @@ export function cssPostPlugin( chunkCssCode, }: { chunkCssFilename: (id: string) => string | void - chunkCssCode: (filename: string, cssCode: string) => string + chunkCssCode: ( + filename: string, + cssCode: string + ) => Promise | string } ): Plugin { // styles initialization in buildStart causes a styling loss in watch diff --git a/packages/uni-cli-shared/src/vite/utils/plugin.ts b/packages/uni-cli-shared/src/vite/utils/plugin.ts index 2d45751ae..cca2c2428 100644 --- a/packages/uni-cli-shared/src/vite/utils/plugin.ts +++ b/packages/uni-cli-shared/src/vite/utils/plugin.ts @@ -26,7 +26,10 @@ export function injectCssPostPlugin( chunkCssCode, }: { chunkCssFilename: (id: string) => string | void - chunkCssCode: (filename: string, cssCode: string) => string + chunkCssCode: ( + filename: string, + cssCode: string + ) => string | Promise } ) { const newCssPostPlugin = cssPostPlugin(config, { diff --git a/packages/uni-nvue-styler/__tests__/normalize.spec.ts b/packages/uni-nvue-styler/__tests__/normalize.spec.ts index 9f278fa6b..de92697d9 100644 --- a/packages/uni-nvue-styler/__tests__/normalize.spec.ts +++ b/packages/uni-nvue-styler/__tests__/normalize.spec.ts @@ -1,9 +1,9 @@ -import { objectifier, parse } from '../src' +import { parse } from '../src' async function objectifierRule(input: string) { - const { root, messages } = await parse(input, { logLevel: 'NOTE' }) + const { code, messages } = await parse(input, { logLevel: 'NOTE' }) return { - json: objectifier(root), + json: JSON.parse(code), messages, } } diff --git a/packages/uni-nvue-styler/__tests__/objectifier.spec.ts b/packages/uni-nvue-styler/__tests__/objectifier.spec.ts index 26507550b..9f812dfb2 100644 --- a/packages/uni-nvue-styler/__tests__/objectifier.spec.ts +++ b/packages/uni-nvue-styler/__tests__/objectifier.spec.ts @@ -1,9 +1,9 @@ -import { objectifier, parse } from '../src' +import { parse } from '../src' async function objectifierRoot(input: string) { - const { root, messages } = await parse(input, { logLevel: 'NOTE' }) + const { code, messages } = await parse(input, { logLevel: 'NOTE' }) return { - json: objectifier(root), + json: JSON.parse(code), messages, } } diff --git a/packages/uni-nvue-styler/src/parse.ts b/packages/uni-nvue-styler/src/parse.ts index 1f844aba5..235d725ea 100644 --- a/packages/uni-nvue-styler/src/parse.ts +++ b/packages/uni-nvue-styler/src/parse.ts @@ -1,12 +1,13 @@ -import postcss from 'postcss' -import { NormalizeOptions } from './normalize' -import { expand, normalize } from '../src' +import postcss, { Message } from 'postcss' +import { objectifier } from '.' +import { expand } from './expand' +import { NormalizeOptions, normalize } from './normalize' interface ParseOpitons extends NormalizeOptions { filename?: string } -export function parse(input: string, options: ParseOpitons = {}) { - return postcss([expand, normalize(options)]) +export async function parse(input: string, options: ParseOpitons = {}) { + const { root, messages } = await postcss([expand, normalize(options)]) .process(input, { from: options.filename || 'foo.css', }) @@ -17,8 +18,12 @@ export function parse(input: string, options: ParseOpitons = {}) { { type: 'warning', text: err.message, - }, + } as Message, ], } }) + if (root) { + return { code: JSON.stringify(objectifier(root)), messages } + } + return { code: JSON.stringify({}), messages } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7bd4b4ca..5bfa2ea6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,6 +200,7 @@ importers: specifiers: '@dcloudio/uni-cli-shared': 3.0.0-alpha-3030820220114006 '@dcloudio/uni-i18n': 3.0.0-alpha-3030820220114006 + '@dcloudio/uni-nvue-styler': workspace:* '@dcloudio/uni-shared': 3.0.0-alpha-3030820220114006 '@rollup/pluginutils': ^4.1.2 '@types/debug': ^4.1.7 @@ -214,6 +215,7 @@ importers: dependencies: '@dcloudio/uni-cli-shared': link:../uni-cli-shared '@dcloudio/uni-i18n': link:../uni-i18n + '@dcloudio/uni-nvue-styler': link:../uni-nvue-styler '@dcloudio/uni-shared': link:../uni-shared '@rollup/pluginutils': 4.1.2 '@vitejs/plugin-vue': 2.0.1_vite@2.7.13+vue@3.2.27 -- GitLab