refactor(sfc-playground): default to dev mode

This commit is contained in:
Evan You 2023-12-26 17:57:18 +08:00
parent 38706e4a1e
commit baf0b7664d
2 changed files with 29 additions and 24 deletions

View File

@ -26,13 +26,17 @@ const setVH = () => {
window.addEventListener('resize', setVH) window.addEventListener('resize', setVH)
setVH() setVH()
const useDevMode = ref(true) const useProdMode = ref(false)
const useSSRMode = ref(false) const useSSRMode = ref(false)
let hash = location.hash.slice(1) let hash = location.hash.slice(1)
if (hash.startsWith('__DEV__')) { if (hash.startsWith('__DEV__')) {
hash = hash.slice(7) hash = hash.slice(7)
useDevMode.value = true useProdMode.value = false
}
if (hash.startsWith('__PROD__')) {
hash = hash.slice(8)
useProdMode.value = true
} }
if (hash.startsWith('__SSR__')) { if (hash.startsWith('__SSR__')) {
hash = hash.slice(7) hash = hash.slice(7)
@ -41,7 +45,7 @@ if (hash.startsWith('__SSR__')) {
const store = new ReplStore({ const store = new ReplStore({
serializedState: hash, serializedState: hash,
productionMode: !useDevMode.value, productionMode: useProdMode.value,
defaultVueRuntimeURL: import.meta.env.PROD defaultVueRuntimeURL: import.meta.env.PROD
? `${location.origin}/vue.runtime.esm-browser.js` ? `${location.origin}/vue.runtime.esm-browser.js`
: `${location.origin}/src/vue-dev-proxy`, : `${location.origin}/src/vue-dev-proxy`,
@ -56,15 +60,15 @@ const store = new ReplStore({
// enable experimental features // enable experimental features
const sfcOptions: SFCOptions = { const sfcOptions: SFCOptions = {
script: { script: {
inlineTemplate: !useDevMode.value, inlineTemplate: useProdMode.value,
isProd: !useDevMode.value, isProd: useProdMode.value,
propsDestructure: true propsDestructure: true
}, },
style: { style: {
isProd: !useDevMode.value isProd: useProdMode.value
}, },
template: { template: {
isProd: !useDevMode.value isProd: useProdMode.value
} }
} }
@ -73,18 +77,19 @@ watchEffect(() => {
const newHash = store const newHash = store
.serialize() .serialize()
.replace(/^#/, useSSRMode.value ? `#__SSR__` : `#`) .replace(/^#/, useSSRMode.value ? `#__SSR__` : `#`)
.replace(/^#/, useDevMode.value ? `#__DEV__` : `#`) .replace(/^#/, useProdMode.value ? `#__PROD__` : `#`)
history.replaceState({}, '', newHash) history.replaceState({}, '', newHash)
}) })
function toggleDevMode() { function toggleProdMode() {
const dev = (useDevMode.value = !useDevMode.value) const isProd = (useProdMode.value = !useProdMode.value)
sfcOptions.script!.inlineTemplate = sfcOptions.script!.inlineTemplate =
sfcOptions.script!.isProd = sfcOptions.script!.isProd =
sfcOptions.template!.isProd = sfcOptions.template!.isProd =
sfcOptions.style!.isProd = sfcOptions.style!.isProd =
!dev isProd
store.toggleProduction() store.toggleProduction()
store.setFiles(store.getFiles())
} }
function toggleSSR() { function toggleSSR() {
@ -109,10 +114,10 @@ onMounted(() => {
<template> <template>
<Header <Header
:store="store" :store="store"
:dev="useDevMode" :prod="useProdMode"
:ssr="useSSRMode" :ssr="useSSRMode"
@toggle-theme="toggleTheme" @toggle-theme="toggleTheme"
@toggle-dev="toggleDevMode" @toggle-prod="toggleProdMode"
@toggle-ssr="toggleSSR" @toggle-ssr="toggleSSR"
@reload-page="reloadPage" @reload-page="reloadPage"
/> />

View File

@ -12,13 +12,13 @@ import VersionSelect from './VersionSelect.vue'
const props = defineProps<{ const props = defineProps<{
store: ReplStore store: ReplStore
dev: boolean prod: boolean
ssr: boolean ssr: boolean
}>() }>()
const emit = defineEmits([ const emit = defineEmits([
'toggle-theme', 'toggle-theme',
'toggle-ssr', 'toggle-ssr',
'toggle-dev', 'toggle-prod',
'reload-page' 'reload-page'
]) ])
@ -90,11 +90,11 @@ function toggleDark() {
</VersionSelect> </VersionSelect>
<button <button
title="Toggle development production mode" title="Toggle development production mode"
class="toggle-dev" class="toggle-prod"
:class="{ dev }" :class="{ prod }"
@click="$emit('toggle-dev')" @click="$emit('toggle-prod')"
> >
<span>{{ dev ? 'DEV' : 'PROD' }}</span> <span>{{ prod ? 'PROD' : 'DEV' }}</span>
</button> </button>
<button <button
title="Toggle server rendering mode" title="Toggle server rendering mode"
@ -195,20 +195,20 @@ h1 img {
display: flex; display: flex;
} }
.toggle-dev span, .toggle-prod span,
.toggle-ssr span { .toggle-ssr span {
font-size: 12px; font-size: 12px;
border-radius: 4px; border-radius: 4px;
padding: 4px 6px; padding: 4px 6px;
} }
.toggle-dev span { .toggle-prod span {
background: var(--purple); background: var(--green);
color: #fff; color: #fff;
} }
.toggle-dev.dev span { .toggle-prod.prod span {
background: var(--green); background: var(--purple);
} }
.toggle-ssr span { .toggle-ssr span {