diff --git a/meta.js b/meta.js index e2e2fdffa1..bf65375d59 100644 --- a/meta.js +++ b/meta.js @@ -40,6 +40,10 @@ module.exports = { } ] }, + "typescript": { + "type": "confirm", + "message": "Setup Vue build with TypeScript?" + }, "router": { "type": "confirm", "message": "Install vue-router?" @@ -86,7 +90,10 @@ module.exports = { "test/unit/**/*": "unit", "build/webpack.test.conf.js": "unit", "test/e2e/**/*": "e2e", - "src/router/**/*": "router" + "src/router/**/*": "router", + "src/**/*.ts": "typescript", + "tsconfig.json": "typescript", + "src/**/*.js": "!typescript" }, "completeMessage": "To get started:\n\n {{^inPlace}}cd {{destDirName}}\n {{/inPlace}}npm install\n npm run dev\n\nDocumentation can be found at https://vuejs-templates.github.io/webpack" }; diff --git a/template/build/vue-loader.conf.js b/template/build/vue-loader.conf.js index 7aee79bae4..a6d1e1069b 100644 --- a/template/build/vue-loader.conf.js +++ b/template/build/vue-loader.conf.js @@ -8,5 +8,6 @@ module.exports = { ? config.build.productionSourceMap : config.dev.cssSourceMap, extract: isProduction - }) + }){{#typescript}}, + esModule: true{{/typescript}} } diff --git a/template/build/webpack.base.conf.js b/template/build/webpack.base.conf.js index 0f161198d4..6b89577b1a 100644 --- a/template/build/webpack.base.conf.js +++ b/template/build/webpack.base.conf.js @@ -9,7 +9,7 @@ function resolve (dir) { module.exports = { entry: { - app: './src/main.js' + app: './src/main.{{#typescript}}t{{else}}j{{/typescript}}s' }, output: { path: config.build.assetsRoot, @@ -19,7 +19,7 @@ module.exports = { : config.dev.assetsPublicPath }, resolve: { - extensions: ['.js', '.vue', '.json'], + extensions: ['.js', '.vue', '.json'{{#typescript}},'.ts'{{/typescript}}], alias: { {{#if_eq build "standalone"}} 'vue$': 'vue/dist/vue.esm.js', @@ -44,7 +44,16 @@ module.exports = { test: /\.vue$/, loader: 'vue-loader', options: vueLoaderConfig + },{{#typescript}} + // Documentation @ https://www.npmjs.com/package/ts-loader + { + test: /\.ts$/, + loader: 'ts-loader', + options: { + appendTsSuffixTo: [/\.vue$/] + } }, + {{/typescript}} { test: /\.js$/, loader: 'babel-loader', diff --git a/template/package.json b/template/package.json index 3f496f06ad..b36b2db314 100644 --- a/template/package.json +++ b/template/package.json @@ -15,7 +15,10 @@ }, "dependencies": { "vue": "^2.3.3"{{#router}}, - "vue-router": "^2.3.1"{{/router}} + "vue-router": "^2.3.1"{{/router}}{{#typescript}}, + "ts-loader": "^2.2.1", + "typescript": "^2.4.1", + "vue-class-component": "^5.0.1"{{/typescript}} }, "devDependencies": { "autoprefixer": "^6.7.2", diff --git a/template/src/App.vue b/template/src/App.vue index 74a25d1dfa..76cd769acb 100644 --- a/template/src/App.vue +++ b/template/src/App.vue @@ -8,17 +8,30 @@ {{/router}} - - diff --git a/template/src/components/Hello.vue b/template/src/components/Hello.vue index dc7251a0f2..6d1a09cdfd 100644 --- a/template/src/components/Hello.vue +++ b/template/src/components/Hello.vue @@ -1,7 +1,7 @@ -