mirror of https://github.com/vuejs/core.git
refactor(sfc-playground): default to dev mode
This commit is contained in:
parent
38706e4a1e
commit
baf0b7664d
|
@ -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"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue