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

chore: test

上级 8f1a6a57
......@@ -19,3 +19,4 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
build_script: build
files: packages/size-check/dist/size-check.es.js packages/size-check/dist/style.css packages/uni-app/dist/uni-app.es.js packages/uni-h5-vue/dist/vue.runtime.esm.js packages/uni-mp-vue/dist/vue.runtime.esm.js packages/uni-mp-alipay/dist/uni.api.esm.js packages/uni-mp-alipay/dist/uni.mp.esm.js packages/uni-mp-baidu/dist/uni.api.esm.js packages/uni-mp-baidu/dist/uni.mp.esm.js packages/uni-mp-qq/dist/uni.api.esm.js packages/uni-mp-qq/dist/uni.mp.esm.js packages/uni-mp-toutiao/dist/uni.api.esm.js packages/uni-mp-toutiao/dist/uni.mp.esm.js packages/uni-mp-weixin/dist/uni.api.esm.js packages/uni-mp-weixin/dist/uni.mp.esm.js packages/uni-quickapp-webview/dist/uni.api.esm.js packages/uni-quickapp-webview/dist/uni.mp.esm.js
- run: npm run test
......@@ -6,7 +6,7 @@
],
"scripts": {
"build": "node scripts/build.js",
"size": "size-limit",
"size": "npm run build size-check",
"lint": "eslint packages/*/src/**/*.ts",
"format": "prettier --write --parser typescript \"packages/**/*.ts?(x)\"",
"ls-lint": "ls-lint",
......
import { createOnApi } from '../../src/helpers/api/index'
import { normalizeErrMsg } from '../../src/helpers/api/callback'
describe('api', () => {
test('normalizeErrMsg', () => {
......@@ -13,10 +12,4 @@ describe('api', () => {
normalizeErrMsg('redirectTo:fail page not found', 'navigateTo')
).toEqual('navigateTo:fail page not found')
})
test('createOnApi', () => {
createOnApi<typeof uni.onCompassChange>(
'onCompassChange',
(callback: Function) => {}
)
})
})
import {
validateProtocols,
API_TYPE_ON_PROTOCOLS,
} from '../../src/helpers/protocol'
import { validateProtocols } from '../../src/helpers/protocol'
import { Upx2pxProtocol } from '../../src/protocols/base/upx2px'
import { CreateCanvasContextProtocol } from '../../src/protocols/context/context'
describe('protocol', () => {
......@@ -10,26 +7,14 @@ describe('protocol', () => {
})
test('validate upx2px', () => {
expect(validateProtocols('upx2px', [1], Upx2pxProtocol)).toBeFalsy()
expect(validateProtocols('upx2px', [], Upx2pxProtocol)).toEqual({
errMsg: `upx2px:fail Missing required args: "upx"`,
validateProtocols('upx2px', [], Upx2pxProtocol, (name, msg) => {
expect(name).toBe('upx2px')
expect(msg).toBe(`Missing required args: "upx"`)
})
expect(validateProtocols('upx2px', [true], Upx2pxProtocol)).toEqual({
errMsg: `upx2px:fail Invalid args: type check failed for args "upx". Expected Number, String, got Boolean with value true.`,
})
})
test('validate onLocationChange', () => {
expect(
validateProtocols('onLocationChange', [() => {}], API_TYPE_ON_PROTOCOLS)
).toBeFalsy()
expect(
validateProtocols('onLocationChange', [], API_TYPE_ON_PROTOCOLS)
).toEqual({
errMsg: `onLocationChange:fail Missing required args: "callback"`,
})
expect(
validateProtocols('onLocationChange', [1], API_TYPE_ON_PROTOCOLS)
).toEqual({
errMsg: `onLocationChange:fail Invalid args: type check failed for args "callback". Expected Function, got Number with value 1.`,
validateProtocols('upx2px', [true], Upx2pxProtocol, (_name, msg) => {
expect(msg).toBe(
`Invalid args: type check failed for args "upx". Expected Number, String, got Boolean with value true.`
)
})
})
test('validate createCanvasContext', () => {
......@@ -40,15 +25,24 @@ describe('protocol', () => {
CreateCanvasContextProtocol
)
).toBeFalsy()
expect(
validateProtocols('createCanvasContext', [], CreateCanvasContextProtocol)
).toEqual({
errMsg: `createCanvasContext:fail Missing required args: "canvasId"`,
})
expect(
validateProtocols('createCanvasContext', [1], CreateCanvasContextProtocol)
).toEqual({
errMsg: `createCanvasContext:fail Invalid args: type check failed for args "canvasId". Expected String with value "1", got Number with value 1.`,
})
validateProtocols(
'createCanvasContext',
[],
CreateCanvasContextProtocol,
(_name, msg) => {
expect(msg).toBe(`Missing required args: "canvasId"`)
}
)
validateProtocols(
'createCanvasContext',
[1],
CreateCanvasContextProtocol,
(_name, msg) => {
expect(msg).toBe(
`Invalid args: type check failed for args "canvasId". Expected String with value "1", got Number with value 1.`
)
}
)
})
})
......@@ -51,8 +51,12 @@ function validateProtocolFail(name: string, msg: string) {
function validateProtocol(
name: string,
data: Record<string, any>,
protocol?: ApiProtocol<any>
protocol?: ApiProtocol<any>,
onFail?: (name: string, msg: string) => void
) {
if (!onFail) {
onFail = validateProtocolFail
}
for (const key in protocol) {
const errMsg = validateProp(
key,
......@@ -61,7 +65,7 @@ function validateProtocol(
!hasOwn(data, key)
)
if (isString(errMsg)) {
validateProtocolFail(name, errMsg)
onFail(name, errMsg)
}
}
}
......@@ -69,13 +73,19 @@ function validateProtocol(
export function validateProtocols(
name: string,
args: any[],
protocol?: ApiProtocols<any>
protocol?: ApiProtocols<any>,
onFail?: (name: string, msg: string) => void
) {
if (!protocol) {
return
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol)
return validateProtocol(
name,
args[0] || Object.create(null),
protocol,
onFail
)
}
const len = protocol.length
const argsLen = args.length
......@@ -85,7 +95,7 @@ export function validateProtocols(
if (argsLen > i) {
data[opts.name!] = args[i]
}
validateProtocol(name, data, { [opts.name!]: opts })
validateProtocol(name, data, { [opts.name!]: opts }, onFail)
}
}
......
......@@ -476,20 +476,23 @@ function elemInArray(str, arr) {
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !shared.hasOwn(data, key));
if (shared.isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!shared.isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -499,7 +502,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i2) {
data[opts.name] = args[i2];
}
validateProtocol(name, data, {[opts.name]: opts});
validateProtocol(name, data, {[opts.name]: opts}, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -1270,20 +1270,23 @@ function elemsInArray(strArr, optionalVal) {
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -1293,7 +1296,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i2) {
data[opts.name] = args[i2];
}
validateProtocol(name, data, {[opts.name]: opts});
validateProtocol(name, data, {[opts.name]: opts}, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
......@@ -3,20 +3,23 @@ import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawTy
function validateProtocolFail(name, msg) {
console.warn(`${name}: ${msg}`);
}
function validateProtocol(name, data, protocol) {
function validateProtocol(name, data, protocol, onFail) {
if (!onFail) {
onFail = validateProtocolFail;
}
for (const key in protocol) {
const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key));
if (isString(errMsg)) {
validateProtocolFail(name, errMsg);
onFail(name, errMsg);
}
}
}
function validateProtocols(name, args, protocol) {
function validateProtocols(name, args, protocol, onFail) {
if (!protocol) {
return;
}
if (!isArray(protocol)) {
return validateProtocol(name, args[0] || Object.create(null), protocol);
return validateProtocol(name, args[0] || Object.create(null), protocol, onFail);
}
const len = protocol.length;
const argsLen = args.length;
......@@ -26,7 +29,7 @@ function validateProtocols(name, args, protocol) {
if (argsLen > i) {
data[opts.name] = args[i];
}
validateProtocol(name, data, { [opts.name]: opts });
validateProtocol(name, data, { [opts.name]: opts }, onFail);
}
}
function validateProp(name, value, prop, isAbsent) {
......
import path from 'path'
import { initEasycom, matchEasycom } from '../src/easycom'
import { initEasycoms, matchEasycom } from '../src/utils'
const rootDir = path.resolve(__dirname, 'example')
const dirs = [
path.resolve(__dirname, 'example/components'),
path.resolve(__dirname, 'example/uni_modules/plugin/components'),
]
describe('easycom', () => {
test('initEasycom with dirs', () => {
expect(initEasycom({ dirs, rootDir })).toEqual([
expect(initEasycoms(rootDir, 'h5').easycoms).toEqual([
{
pattern: new RegExp('^test$'),
replacement: '@/components/test/test.vue',
......@@ -23,46 +19,16 @@ describe('easycom', () => {
pattern: new RegExp('^test2$'),
replacement: '@/uni_modules/plugin/components/test2/test2.vue',
},
{
pattern: new RegExp('^uni-(.*)'),
replacement: '@/components/uni-$1.vue',
},
])
expect(matchEasycom('test')).toBe('@/components/test/test.vue')
expect(matchEasycom('test1')).toBe('@/components/test1/test1.vue')
expect(matchEasycom('test2')).toBe(
'@/uni_modules/plugin/components/test2/test2.vue'
)
})
test('initEasycom with custom', () => {
expect(
initEasycom({ custom: { '^uni-(.*)': '@/components/uni-$1.vue' } })
).toEqual([
{
pattern: new RegExp('^uni-(.*)'),
replacement: '@/components/uni-$1.vue',
},
])
expect(matchEasycom('test')).toBe(false)
expect(matchEasycom('uni-test1')).toBe('@/components/uni-test1.vue')
})
test('initEasycom with dirs and custom', () => {
expect(
initEasycom({
dirs,
rootDir,
custom: { '^test$': '@/components/uni-test.vue' },
})
).toEqual([
{
pattern: new RegExp('^test$'),
replacement: '@/components/uni-test.vue',
},
{
pattern: new RegExp('^test1$'),
replacement: '@/components/test1/test1.vue',
},
{
pattern: new RegExp('^test2$'),
replacement: '@/uni_modules/plugin/components/test2/test2.vue',
},
])
expect(matchEasycom('test')).toBe('@/components/uni-test.vue')
})
})
{
"pages": [
{
"path": "pages/index/index"
}
],
"easycom": {
"custom": {
"^uni-(.*)": "@/components/uni-$1.vue"
}
}
}
......@@ -4,11 +4,11 @@ import {
parsePagesJsonOnce,
parseManifestJsonOnce,
} from '@dcloudio/uni-cli-shared'
import { initFeatures } from '../utils'
import { initFeatures, isSsr, isSsrManifest } from '../utils'
export function createDefine(
{ inputDir, platform }: VitePluginUniResolvedOptions,
{ server }: UserConfig,
config: UserConfig,
{ command }: ConfigEnv
): UserConfig['define'] {
return initFeatures({
......@@ -17,6 +17,6 @@ export function createDefine(
platform,
pagesJson: parsePagesJsonOnce(inputDir, platform),
manifestJson: parseManifestJsonOnce(inputDir),
ssr: !!(server && server.middlewareMode),
ssr: isSsr(command, config) || isSsrManifest(command, config),
})
}
import { ResolvedConfig } from 'vite'
import { rewriteSsrNativeTag, rewriteSsrRenderStyle } from '../utils'
import { isSsr, rewriteSsrNativeTag, rewriteSsrRenderStyle } from '../utils'
// import alias from 'module-alias'
export function initConfig(config: ResolvedConfig) {
if (
(config.command === 'serve' && config.server.middlewareMode) ||
(config.command === 'build' && config.build.ssr)
) {
if (isSsr(config.command, config)) {
rewriteSsrNativeTag()
rewriteSsrRenderStyle(process.env.UNI_INPUT_DIR)
}
......
......@@ -2,6 +2,7 @@ import path from 'path'
import slash from 'slash'
import { Plugin, ResolvedConfig } from 'vite'
import { VitePluginUniResolvedOptions } from '../..'
import { isSsr, isSsrManifest } from '../../utils'
export function uniMainJsPlugin(
config: ResolvedConfig,
......@@ -12,11 +13,7 @@ export function uniMainJsPlugin(
const mainTsPath = mainPath + '.ts'
const pagesJsonJsPath = slash(path.resolve(options.inputDir, 'pages.json.js'))
const isSSR =
config.command === 'serve'
? !!config.server.middlewareMode
: config.command === 'build'
? !!(config.build.ssr || config.build.ssrManifest)
: false
isSsr(config.command, config) || isSsrManifest(config.command, config)
return {
name: 'vite:uni-main-js',
transform(code, id, ssr) {
......
......@@ -38,52 +38,53 @@ function clearEasycom() {
easycomsInvalidCache.clear()
}
export const initEasycomsOnce = once(
(inputDir: string, platform: UniApp.PLATFORM) => {
const buildInComponentsDir = path.resolve(
require.resolve('@dcloudio/uni-components'),
'../lib'
)
const componentsDir = path.resolve(inputDir, 'components')
const uniModulesDir = path.resolve(inputDir, 'uni_modules')
const initEasycomOptions = (pagesJson?: UniApp.PagesJson) => {
// 初始化时,从once中读取缓存,refresh时,实时读取
const { easycom } = pagesJson || parsePagesJson(inputDir, platform, false)
const easycomOptions: EasycomOption = {
dirs:
easycom && easycom.autoscan === false
? [buildInComponentsDir] // 禁止自动扫描
: [
buildInComponentsDir,
componentsDir,
...initUniModulesEasycomDirs(uniModulesDir),
],
rootDir: inputDir,
autoscan: !!(easycom && easycom.autoscan),
custom: (easycom && easycom.custom) || {},
}
debugEasycom(easycomOptions)
return easycomOptions
}
const options = initEasycomOptions(parsePagesJsonOnce(inputDir, platform))
initEasycom(options)
const res = {
options,
filter: createFilter(
['components/*/*.vue', 'uni_modules/*/components/*/*.vue'],
[],
{
resolve: inputDir,
}
),
refresh() {
res.options = initEasycomOptions()
initEasycom(res.options)
},
export function initEasycoms(inputDir: string, platform: UniApp.PLATFORM) {
const buildInComponentsDir = path.resolve(
require.resolve('@dcloudio/uni-components'),
'../lib'
)
const componentsDir = path.resolve(inputDir, 'components')
const uniModulesDir = path.resolve(inputDir, 'uni_modules')
const initEasycomOptions = (pagesJson?: UniApp.PagesJson) => {
// 初始化时,从once中读取缓存,refresh时,实时读取
const { easycom } = pagesJson || parsePagesJson(inputDir, platform, false)
const easycomOptions: EasycomOption = {
dirs:
easycom && easycom.autoscan === false
? [buildInComponentsDir] // 禁止自动扫描
: [
buildInComponentsDir,
componentsDir,
...initUniModulesEasycomDirs(uniModulesDir),
],
rootDir: inputDir,
autoscan: !!(easycom && easycom.autoscan),
custom: (easycom && easycom.custom) || {},
}
return res
debugEasycom(easycomOptions)
return easycomOptions
}
)
const options = initEasycomOptions(parsePagesJsonOnce(inputDir, platform))
initEasycom(options)
const res = {
options,
filter: createFilter(
['components/*/*.vue', 'uni_modules/*/components/*/*.vue'],
[],
{
resolve: inputDir,
}
),
refresh() {
res.options = initEasycomOptions()
initEasycom(res.options)
},
easycoms,
}
return res
}
export const initEasycomsOnce = once(initEasycoms)
function initUniModulesEasycomDirs(uniModulesDir: string) {
if (!fs.existsSync(uniModulesDir)) {
......
......@@ -7,6 +7,30 @@ import {
Rpx2UnitOptions,
} from '@dcloudio/uni-shared'
import { parseRpx2UnitOnce } from '@dcloudio/uni-cli-shared'
import { ConfigEnv, ResolvedConfig, UserConfig } from 'vite'
export function isSsr(
command: ConfigEnv['command'],
config: UserConfig | ResolvedConfig
) {
if (command === 'serve') {
return !!(config.server && config.server.middlewareMode)
}
if (command === 'build') {
return !!(config.build && config.build.ssr)
}
return false
}
export function isSsrManifest(
command: ConfigEnv['command'],
config: UserConfig | ResolvedConfig
) {
if (command === 'build') {
return !!(config.build && config.build.ssrManifest)
}
return false
}
function serializeDefine(define: Record<string, any>): string {
let res = `{`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册