diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index 1b606e86810dcf..819b2b433ce439 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,3 +1,12 @@
+# [2.2.0](https://github.com/vitejs/vite/compare/create-app@2.1.0...create-app@2.2.0) (2021-03-16)
+
+
+### Features
+
+* **create-app:** add 'svelte' and 'svelte-ts' options ([#2537](https://github.com/vitejs/vite/issues/2537)) ([e441f23](https://github.com/vitejs/vite/commit/e441f23e187eec0834704949da492515cd25f8cd))
+
+
+
# [2.1.0](https://github.com/vitejs/vite/compare/create-app@2.0.2...create-app@2.1.0) (2021-03-15)
diff --git a/packages/create-app/README.md b/packages/create-app/README.md
index c4ab2e42728621..f3b4b76b598121 100644
--- a/packages/create-app/README.md
+++ b/packages/create-app/README.md
@@ -43,6 +43,8 @@ Currently supported template presets include:
- `preact-ts`
- `lit-element`
- `lit-element-ts`
+- `svelte`
+- `svelte-ts`
## Community Templates
diff --git a/packages/create-app/index.js b/packages/create-app/index.js
index 0cc1af168e6bfd..2613a66ab50cf2 100755
--- a/packages/create-app/index.js
+++ b/packages/create-app/index.js
@@ -11,6 +11,7 @@ const {
cyan,
magenta,
lightRed,
+ red,
stripColors
} = require('kolorist')
@@ -25,7 +26,9 @@ const TEMPLATES = [
magenta('preact'),
magenta('preact-ts'),
lightRed('lit-element'),
- lightRed('lit-element-ts')
+ lightRed('lit-element-ts'),
+ red('svelte'),
+ red('svelte-ts')
]
const renameFiles = {
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index 485f1df180cc2c..8f3524b5030e03 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,6 +1,6 @@
{
"name": "@vitejs/create-app",
- "version": "2.1.0",
+ "version": "2.2.0",
"license": "MIT",
"author": "Evan You",
"bin": {
diff --git a/packages/create-app/template-preact-ts/package.json b/packages/create-app/template-preact-ts/package.json
index 26469d50809d7f..50b2ab0a60e20a 100644
--- a/packages/create-app/template-preact-ts/package.json
+++ b/packages/create-app/template-preact-ts/package.json
@@ -7,10 +7,10 @@
"serve": "vite preview"
},
"dependencies": {
- "preact": "^10.5.9"
+ "preact": "^10.5.13"
},
"devDependencies": {
- "@prefresh/vite": "^2.0.0",
+ "@preact/preset-vite": "^2.0.0",
"typescript": "^4.1.3",
"vite": "^2.1.0"
}
diff --git a/packages/create-app/template-preact-ts/vite.config.ts b/packages/create-app/template-preact-ts/vite.config.ts
index 35560da39ca851..e3bdaffe854595 100644
--- a/packages/create-app/template-preact-ts/vite.config.ts
+++ b/packages/create-app/template-preact-ts/vite.config.ts
@@ -1,12 +1,7 @@
import { defineConfig } from 'vite'
-import preactRefresh from '@prefresh/vite'
+import preact from '@preact/preset-vite'
// https://vitejs.dev/config/
export default defineConfig({
- esbuild: {
- jsxFactory: 'h',
- jsxFragment: 'Fragment',
- jsxInject: `import { h, Fragment } from 'preact'`
- },
- plugins: [preactRefresh()]
+ plugins: [preact()]
})
diff --git a/packages/create-app/template-preact/package.json b/packages/create-app/template-preact/package.json
index 7eaa2d46ac2a7c..247311f78d3bd7 100644
--- a/packages/create-app/template-preact/package.json
+++ b/packages/create-app/template-preact/package.json
@@ -7,10 +7,10 @@
"serve": "vite preview"
},
"dependencies": {
- "preact": "^10.5.9"
+ "preact": "^10.5.13"
},
"devDependencies": {
- "@prefresh/vite": "^2.0.0",
+ "@preact/preset-vite": "^2.0.0",
"vite": "^2.1.0"
}
}
\ No newline at end of file
diff --git a/packages/create-app/template-preact/vite.config.js b/packages/create-app/template-preact/vite.config.js
index 35560da39ca851..e3bdaffe854595 100644
--- a/packages/create-app/template-preact/vite.config.js
+++ b/packages/create-app/template-preact/vite.config.js
@@ -1,12 +1,7 @@
import { defineConfig } from 'vite'
-import preactRefresh from '@prefresh/vite'
+import preact from '@preact/preset-vite'
// https://vitejs.dev/config/
export default defineConfig({
- esbuild: {
- jsxFactory: 'h',
- jsxFragment: 'Fragment',
- jsxInject: `import { h, Fragment } from 'preact'`
- },
- plugins: [preactRefresh()]
+ plugins: [preact()]
})
diff --git a/packages/create-app/template-svelte-ts/.vscode/extensions.json b/packages/create-app/template-svelte-ts/.vscode/extensions.json
new file mode 100644
index 00000000000000..bdef82015138f5
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["svelte.svelte-vscode"]
+}
diff --git a/packages/create-app/template-svelte-ts/README.md b/packages/create-app/template-svelte-ts/README.md
new file mode 100644
index 00000000000000..2e42916edc251b
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/README.md
@@ -0,0 +1,11 @@
+# Svelte + TS + Vite
+
+This template should help get you started developing with Svelte and TypeScript in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode).
+
+## Need an official Svelte framework?
+
+Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more.
diff --git a/packages/create-app/template-svelte-ts/_gitignore b/packages/create-app/template-svelte-ts/_gitignore
new file mode 100644
index 00000000000000..126fe84d533f52
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/_gitignore
@@ -0,0 +1,4 @@
+/node_modules/
+/dist/
+/.vscode/
+.DS_Store
diff --git a/packages/create-app/template-svelte-ts/globals.d.ts b/packages/create-app/template-svelte-ts/globals.d.ts
new file mode 100644
index 00000000000000..4078e7476a2eaf
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/globals.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/packages/create-app/template-svelte-ts/index.html b/packages/create-app/template-svelte-ts/index.html
new file mode 100644
index 00000000000000..d2f6839bab176c
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Svelte + TS + Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-svelte-ts/package.json b/packages/create-app/template-svelte-ts/package.json
new file mode 100644
index 00000000000000..ddef4dc160de8f
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "vite-svelte-ts-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "serve": "vite preview"
+ },
+ "devDependencies": {
+ "@svitejs/vite-plugin-svelte": "^0.11.1",
+ "svelte": "^3.35.0",
+ "svelte-preprocess": "^4.6.9",
+ "typescript": "^4.2.3",
+ "vite": "^2.1.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/create-app/template-svelte-ts/public/favicon.ico b/packages/create-app/template-svelte-ts/public/favicon.ico
new file mode 100644
index 00000000000000..d75d248ef0b150
Binary files /dev/null and b/packages/create-app/template-svelte-ts/public/favicon.ico differ
diff --git a/packages/create-app/template-svelte-ts/src/App.svelte b/packages/create-app/template-svelte-ts/src/App.svelte
new file mode 100644
index 00000000000000..624bfb36d2d837
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/src/App.svelte
@@ -0,0 +1,65 @@
+
+
+
+
+ Hello Typescript!
+
+
+
+
+ Visit svelte.dev to learn how to build Svelte
+ apps.
+
+
+
+ Check out SvelteKit for
+ the officially supported framework, also powered by Vite!
+
+
+
+
diff --git a/packages/create-app/template-svelte-ts/src/assets/svelte.png b/packages/create-app/template-svelte-ts/src/assets/svelte.png
new file mode 100644
index 00000000000000..e673c91c7bcb0e
Binary files /dev/null and b/packages/create-app/template-svelte-ts/src/assets/svelte.png differ
diff --git a/packages/create-app/template-svelte-ts/src/lib/Counter.svelte b/packages/create-app/template-svelte-ts/src/lib/Counter.svelte
new file mode 100644
index 00000000000000..da35d76dafe7d3
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/src/lib/Counter.svelte
@@ -0,0 +1,36 @@
+
+
+
+
+
diff --git a/packages/create-app/template-svelte-ts/src/lib/hmr-stores.ts b/packages/create-app/template-svelte-ts/src/lib/hmr-stores.ts
new file mode 100644
index 00000000000000..2b2ef88b53edd9
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/src/lib/hmr-stores.ts
@@ -0,0 +1,21 @@
+// Customized HMR-safe stores
+// Based off https://github.com/svitejs/svite/blob/ddec6b9/packages/playground/hmr/src/stores/hmr-stores.js
+import { writable } from 'svelte/store'
+import type { Writable } from 'svelte/store'
+
+let stores: Record> = {}
+
+export function getStore(id: string, initialValue: T): Writable {
+ return stores[id] || (stores[id] = writable(initialValue))
+}
+
+// preserve the store across HMR updates
+if (import.meta.hot) {
+ if (import.meta.hot.data.stores) {
+ stores = import.meta.hot.data.stores
+ }
+ import.meta.hot.accept()
+ import.meta.hot.dispose(() => {
+ import.meta.hot.data.stores = stores
+ })
+}
diff --git a/packages/create-app/template-svelte-ts/src/main.ts b/packages/create-app/template-svelte-ts/src/main.ts
new file mode 100644
index 00000000000000..0dfb1eefa5c33b
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/src/main.ts
@@ -0,0 +1,7 @@
+import App from './App.svelte'
+
+const app = new App({
+ target: document.body
+})
+
+export default app
diff --git a/packages/create-app/template-svelte-ts/svelte.config.cjs b/packages/create-app/template-svelte-ts/svelte.config.cjs
new file mode 100644
index 00000000000000..0b32783a0c9940
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/svelte.config.cjs
@@ -0,0 +1,7 @@
+const sveltePreprocess = require('svelte-preprocess')
+
+module.exports = {
+ // Consult https://github.com/sveltejs/svelte-preprocess
+ // for more information about preprocessors
+ preprocess: sveltePreprocess()
+}
diff --git a/packages/create-app/template-svelte-ts/tsconfig.json b/packages/create-app/template-svelte-ts/tsconfig.json
new file mode 100644
index 00000000000000..63a55db19f9b89
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/tsconfig.json
@@ -0,0 +1,36 @@
+{
+ "compilerOptions": {
+ "moduleResolution": "node",
+ "target": "esnext",
+ "module": "esnext",
+ /**
+ * svelte-preprocess cannot figure out whether you have
+ * a value or a type, so tell TypeScript to enforce using
+ * `import type` instead of `import` for Types.
+ */
+ "importsNotUsedAsValues": "error",
+ "isolatedModules": true,
+ /**
+ * To have warnings / errors of the Svelte compiler at the
+ * correct position, enable source maps by default.
+ */
+ "sourceMap": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ /**
+ * Typecheck JS in `.svelte` and `.js` files by default.
+ * Disable checkJs if you'd like to use dynamic types in JS.
+ * Note that setting allowJs false does not prevent the use
+ * of JS in `.svelte` files.
+ */
+ "allowJs": true,
+ "checkJs": true
+ },
+ /**
+ * Use globals.d.ts instead of compilerOptions.types
+ * to avoid limiting type declarations.
+ */
+ "include": ["globals.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"]
+}
diff --git a/packages/create-app/template-svelte-ts/vite.config.js b/packages/create-app/template-svelte-ts/vite.config.js
new file mode 100644
index 00000000000000..0f1999654603c9
--- /dev/null
+++ b/packages/create-app/template-svelte-ts/vite.config.js
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import svelte from '@svitejs/vite-plugin-svelte'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [svelte()]
+})
diff --git a/packages/create-app/template-svelte/.vscode/extensions.json b/packages/create-app/template-svelte/.vscode/extensions.json
new file mode 100644
index 00000000000000..bdef82015138f5
--- /dev/null
+++ b/packages/create-app/template-svelte/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["svelte.svelte-vscode"]
+}
diff --git a/packages/create-app/template-svelte/README.md b/packages/create-app/template-svelte/README.md
new file mode 100644
index 00000000000000..6bf819e309a7b7
--- /dev/null
+++ b/packages/create-app/template-svelte/README.md
@@ -0,0 +1,11 @@
+# Svelte + Vite
+
+This template should help get you started developing with Svelte in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode).
+
+## Need an official Svelte framework?
+
+Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more.
diff --git a/packages/create-app/template-svelte/_gitignore b/packages/create-app/template-svelte/_gitignore
new file mode 100644
index 00000000000000..126fe84d533f52
--- /dev/null
+++ b/packages/create-app/template-svelte/_gitignore
@@ -0,0 +1,4 @@
+/node_modules/
+/dist/
+/.vscode/
+.DS_Store
diff --git a/packages/create-app/template-svelte/globals.d.ts b/packages/create-app/template-svelte/globals.d.ts
new file mode 100644
index 00000000000000..4078e7476a2eaf
--- /dev/null
+++ b/packages/create-app/template-svelte/globals.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/packages/create-app/template-svelte/index.html b/packages/create-app/template-svelte/index.html
new file mode 100644
index 00000000000000..4a3886b62cf793
--- /dev/null
+++ b/packages/create-app/template-svelte/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Svelte + Vite App
+
+
+
+
+
+
diff --git a/packages/create-app/template-svelte/jsconfig.json b/packages/create-app/template-svelte/jsconfig.json
new file mode 100644
index 00000000000000..69e281112333b4
--- /dev/null
+++ b/packages/create-app/template-svelte/jsconfig.json
@@ -0,0 +1,33 @@
+{
+ "compilerOptions": {
+ "moduleResolution": "node",
+ "target": "esnext",
+ "module": "esnext",
+ /**
+ * svelte-preprocess cannot figure out whether you have
+ * a value or a type, so tell TypeScript to enforce using
+ * `import type` instead of `import` for Types.
+ */
+ "importsNotUsedAsValues": "error",
+ "isolatedModules": true,
+ /**
+ * To have warnings / errors of the Svelte compiler at the
+ * correct position, enable source maps by default.
+ */
+ "sourceMap": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ /**
+ * Typecheck JS in `.svelte` and `.js` files by default.
+ * Disable this if you'd like to use dynamic types.
+ */
+ "checkJs": true
+ },
+ /**
+ * Use globals.d.ts instead of compilerOptions.types
+ * to avoid limiting type declarations.
+ */
+ "include": ["globals.d.ts", "src/**/*.js", "src/**/*.svelte"]
+}
diff --git a/packages/create-app/template-svelte/package.json b/packages/create-app/template-svelte/package.json
new file mode 100644
index 00000000000000..167693d21dc824
--- /dev/null
+++ b/packages/create-app/template-svelte/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "vite-svelte-starter",
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "serve": "vite preview"
+ },
+ "devDependencies": {
+ "@svitejs/vite-plugin-svelte": "^0.11.1",
+ "svelte": "^3.35.0",
+ "vite": "^2.1.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/create-app/template-svelte/public/favicon.ico b/packages/create-app/template-svelte/public/favicon.ico
new file mode 100644
index 00000000000000..d75d248ef0b150
Binary files /dev/null and b/packages/create-app/template-svelte/public/favicon.ico differ
diff --git a/packages/create-app/template-svelte/src/App.svelte b/packages/create-app/template-svelte/src/App.svelte
new file mode 100644
index 00000000000000..a2c7aca292e139
--- /dev/null
+++ b/packages/create-app/template-svelte/src/App.svelte
@@ -0,0 +1,65 @@
+
+
+
+
+ Hello world!
+
+
+
+
+ Visit svelte.dev to learn how to build Svelte
+ apps.
+
+
+
+ Check out SvelteKit for
+ the officially supported framework, also powered by Vite!
+
+
+
+
diff --git a/packages/create-app/template-svelte/src/assets/svelte.png b/packages/create-app/template-svelte/src/assets/svelte.png
new file mode 100644
index 00000000000000..e673c91c7bcb0e
Binary files /dev/null and b/packages/create-app/template-svelte/src/assets/svelte.png differ
diff --git a/packages/create-app/template-svelte/src/lib/Counter.svelte b/packages/create-app/template-svelte/src/lib/Counter.svelte
new file mode 100644
index 00000000000000..5224771e987640
--- /dev/null
+++ b/packages/create-app/template-svelte/src/lib/Counter.svelte
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/packages/create-app/template-svelte/src/lib/hmr-stores.js b/packages/create-app/template-svelte/src/lib/hmr-stores.js
new file mode 100644
index 00000000000000..9cd6d0e7005880
--- /dev/null
+++ b/packages/create-app/template-svelte/src/lib/hmr-stores.js
@@ -0,0 +1,29 @@
+// Customized HMR-safe stores
+// Based off https://github.com/svitejs/svite/blob/ddec6b9/packages/playground/hmr/src/stores/hmr-stores.js
+import { writable } from 'svelte/store'
+
+/**
+ * @type { Record> }
+ */
+let stores = {}
+
+/**
+ * @template T
+ * @param { string } id
+ * @param { T } initialValue
+ * @returns { import('svelte/store').Writable }
+ */
+export function getStore(id, initialValue) {
+ return stores[id] || (stores[id] = writable(initialValue))
+}
+
+// preserve the store across HMR updates
+if (import.meta.hot) {
+ if (import.meta.hot.data.stores) {
+ stores = import.meta.hot.data.stores
+ }
+ import.meta.hot.accept()
+ import.meta.hot.dispose(() => {
+ import.meta.hot.data.stores = stores
+ })
+}
diff --git a/packages/create-app/template-svelte/src/main.js b/packages/create-app/template-svelte/src/main.js
new file mode 100644
index 00000000000000..0dfb1eefa5c33b
--- /dev/null
+++ b/packages/create-app/template-svelte/src/main.js
@@ -0,0 +1,7 @@
+import App from './App.svelte'
+
+const app = new App({
+ target: document.body
+})
+
+export default app
diff --git a/packages/create-app/template-svelte/vite.config.js b/packages/create-app/template-svelte/vite.config.js
new file mode 100644
index 00000000000000..0f1999654603c9
--- /dev/null
+++ b/packages/create-app/template-svelte/vite.config.js
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import svelte from '@svitejs/vite-plugin-svelte'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [svelte()]
+})
diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts
index b6449239c20819..bb1a256faa28d7 100644
--- a/packages/vite/src/node/optimizer/scan.ts
+++ b/packages/vite/src/node/optimizer/scan.ts
@@ -219,7 +219,7 @@ function esbuildScanPlugin(
//