Skip to content

Commit e3f8192

Browse files
committed
workflow(sfc-playground): improve support for non-SFC entry points
1 parent fe77e2b commit e3f8192

File tree

3 files changed

+37
-7
lines changed

3 files changed

+37
-7
lines changed

packages/sfc-playground/src/App.vue

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ window.addEventListener('resize', setVH)
1010
setVH()
1111
1212
const useDevMode = ref(false)
13-
const useSSRMode = ref(false)
13+
const useSSRMode = ref<boolean | null>(false)
1414
1515
let hash = location.hash.slice(1)
1616
if (hash.startsWith('__DEV__')) {
@@ -32,6 +32,20 @@ const store = new ReplStore({
3232
: `${location.origin}/src/vue-server-renderer-dev-proxy`
3333
})
3434
35+
let { mainFile } = store.state
36+
37+
if (mainFile === 'App.vue') {
38+
const firstFile = Object.keys(store.getFiles())[0]
39+
if (['index.html', 'main.js', 'main.ts'].includes(firstFile)) {
40+
mainFile = firstFile
41+
store.setFiles(store.getFiles(), mainFile)
42+
}
43+
}
44+
45+
if (!mainFile.endsWith('.vue')) {
46+
useSSRMode.value = null
47+
}
48+
3549
// enable experimental features
3650
const sfcOptions = {
3751
script: {
@@ -63,12 +77,12 @@ function toggleDevMode() {
6377
sfcOptions.template.isProd =
6478
sfcOptions.style.isProd =
6579
!dev
66-
store.setFiles(store.getFiles())
80+
store.setFiles(store.getFiles(), store.state.mainFile)
6781
}
6882
6983
function toggleSSR() {
7084
useSSRMode.value = !useSSRMode.value
71-
store.setFiles(store.getFiles())
85+
store.setFiles(store.getFiles(), store.state.mainFile)
7286
}
7387
</script>
7488

@@ -83,7 +97,7 @@ function toggleSSR() {
8397
<Repl
8498
@keydown.ctrl.s.prevent
8599
@keydown.meta.s.prevent
86-
:ssr="useSSRMode"
100+
:ssr="useSSRMode === true"
87101
:store="store"
88102
:showCompileOutput="true"
89103
:autoResize="true"

packages/sfc-playground/src/Header.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ async function fetchVersions(): Promise<string[]> {
128128
<span>{{ dev ? 'DEV' : 'PROD' }}</span>
129129
</button>
130130
<button
131+
v-if="ssr != null"
131132
title="Toggle server rendering mode"
132133
class="toggle-ssr"
133134
:class="{ enabled: ssr }"
@@ -143,6 +144,7 @@ async function fetchVersions(): Promise<string[]> {
143144
<Share />
144145
</button>
145146
<button
147+
v-if="!store.state.mainFile.endsWith('.html')"
146148
title="Download project files"
147149
class="download"
148150
@click="downloadProject(store)"

packages/sfc-playground/src/download/download.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { saveAs } from 'file-saver'
22

3-
import index from './template/index.html?raw'
4-
import main from './template/main.js?raw'
3+
import indexTemplate from './template/index.html?raw'
4+
import mainTemplate from './template/main.js?raw'
55
import pkg from './template/package.json?raw'
66
import config from './template/vite.config.js?raw'
77
import readme from './template/README.md?raw'
@@ -14,6 +14,13 @@ export async function downloadProject(store: any) {
1414
const { default: JSZip } = await import('jszip')
1515
const zip = new JSZip()
1616

17+
const { mainFile } = store.state
18+
const isMainFileJs = mainFile.endsWith('.js') || mainFile.endsWith('.ts')
19+
20+
const index = isMainFileJs
21+
? indexTemplate.replace('/src/main.js', `/src/${mainFile}`)
22+
: indexTemplate
23+
1724
// basic structure
1825
zip.file('index.html', index)
1926
zip.file('package.json', pkg)
@@ -22,7 +29,14 @@ export async function downloadProject(store: any) {
2229

2330
// project src
2431
const src = zip.folder('src')!
25-
src.file('main.js', main)
32+
33+
if (!isMainFileJs) {
34+
const main = mainFile.endsWith('.vue')
35+
? mainTemplate.replace('./App.vue', `./${mainFile}`)
36+
: mainTemplate
37+
38+
src.file('main.js', main)
39+
}
2640

2741
const files = store.getFiles()
2842
for (const file in files) {

0 commit comments

Comments
 (0)