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

wip(app): nvue

上级 a57940a3
......@@ -2,6 +2,7 @@ import path from 'path'
import {
createTransformTag,
dynamicImportPolyfill,
isUniPageSfcFile,
normalizePath,
parseVueRequest,
removeExt,
......@@ -14,7 +15,7 @@ import { transformRenderWhole } from './transforms/transformRenderWhole'
import { transformAppendAsTree } from './transforms/transformAppendAsTree'
import { transformVideo } from './transforms/transformVideo'
import { transformText } from './transforms/transformText'
import { configResolved } from '../../plugin/configResolved'
import { createConfigResolved } from '../../plugin/configResolved'
const uTags = {
text: 'u-text',
image: 'u-image',
......@@ -37,11 +38,14 @@ export function initNVueNodeTransforms() {
}
export function uniAppNVuePlugin(): Plugin {
const inputDir = process.env.UNI_INPUT_DIR
const mainPath = resolveMainPathOnce(inputDir)
function normalizeCssChunkFilename(id: string) {
return removeExt(normalizePath(path.relative(inputDir, id))) + '.css'
}
return {
name: 'uni:app-nvue',
config() {
const inputDir = process.env.UNI_INPUT_DIR
const mainPath = resolveMainPathOnce(inputDir)
return {
lib: {
// 必须使用 lib 模式,否则会生成 preload 等代码
......@@ -71,7 +75,21 @@ export function uniAppNVuePlugin(): Plugin {
},
}
},
configResolved,
configResolved: createConfigResolved({
chunkCssFilename(id: string) {
if (id === mainPath) {
return 'app.css'
} else if (isUniPageSfcFile(id, inputDir)) {
return normalizeCssChunkFilename(id)
}
},
chunkCssCode(filename, cssCode) {
if (filename === 'app.css') {
return cssCode
}
return cssCode
},
}),
}
}
......
import fs from 'fs'
import path from 'path'
import { Plugin } from 'vite'
import {
injectAssetPlugin,
injectCssPlugin,
injectCssPostPlugin,
resolveMainPathOnce,
normalizePath,
removeExt,
isUniPageSfcFile,
} from '@dcloudio/uni-cli-shared'
let appCss = ''
function normalizeCssChunkFilename(id: string) {
return (
removeExt(normalizePath(path.relative(process.env.UNI_INPUT_DIR, id))) +
'.css'
)
}
export const configResolved: Plugin['configResolved'] = (config) => {
const inputDir = process.env.UNI_INPUT_DIR
const mainPath = resolveMainPathOnce(inputDir)
injectCssPlugin(config)
injectCssPostPlugin(config, {
chunkCssFilename(id: string) {
if (id === mainPath) {
return 'app.css'
} else if (isUniPageSfcFile(id, inputDir)) {
return normalizeCssChunkFilename(id)
}
},
chunkCssCode(filename, cssCode) {
if (filename === 'app.css') {
if (!appCss) {
appCss = fs.readFileSync(
require.resolve('@dcloudio/uni-app-plus/dist/style.css'),
'utf8'
)
}
return appCss + '\n' + cssCode
}
return cssCode
},
})
// 强制不inline
config.build.assetsInlineLimit = 0
injectAssetPlugin(config)
export function createConfigResolved(options: {
chunkCssFilename: (id: string) => string | void
chunkCssCode: (filename: string, cssCode: string) => string
}): Plugin['configResolved'] {
return (config) => {
injectCssPlugin(config)
injectCssPostPlugin(config, options)
// 强制不inline
config.build.assetsInlineLimit = 0
injectAssetPlugin(config)
}
}
......@@ -2,16 +2,27 @@ import path from 'path'
import fs from 'fs-extra'
import {
APP_SERVICE_FILENAME,
isUniPageSfcFile,
normalizePath,
parsePagesJsonOnce,
removeExt,
resolveMainPathOnce,
UniVitePlugin,
} from '@dcloudio/uni-cli-shared'
import { OutputBundle } from 'rollup'
import { APP_RENDERJS_JS, APP_WXS_JS } from '../plugins/renderjs'
import { configResolved } from '../../plugin/configResolved'
import { createConfigResolved } from '../../plugin/configResolved'
import { templateDir } from '../../utils'
export function uniAppVuePlugin(): UniVitePlugin {
const inputDir = process.env.UNI_INPUT_DIR
const mainPath = resolveMainPathOnce(inputDir)
let appCss = ''
function normalizeCssChunkFilename(id: string) {
return removeExt(normalizePath(path.relative(inputDir, id))) + '.css'
}
return {
name: 'uni:app-vue',
config() {
......@@ -30,7 +41,27 @@ export function uniAppVuePlugin(): UniVitePlugin {
},
}
},
configResolved,
configResolved: createConfigResolved({
chunkCssFilename(id: string) {
if (id === mainPath) {
return 'app.css'
} else if (isUniPageSfcFile(id, inputDir)) {
return normalizeCssChunkFilename(id)
}
},
chunkCssCode(filename, cssCode) {
if (filename === 'app.css') {
if (!appCss) {
appCss = fs.readFileSync(
require.resolve('@dcloudio/uni-app-plus/dist/style.css'),
'utf8'
)
}
return appCss + '\n' + cssCode
}
return cssCode
},
}),
generateBundle(_, bundle) {
this.emitFile({
fileName: '__uniappview.html',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册