diff --git a/packages/@vue/cli-plugin-typescript/generator/convert.js b/packages/@vue/cli-plugin-typescript/generator/convert.js index 27b4a11066..4b1a7c27e6 100644 --- a/packages/@vue/cli-plugin-typescript/generator/convert.js +++ b/packages/@vue/cli-plugin-typescript/generator/convert.js @@ -1,22 +1,33 @@ -module.exports = (api, { tsLint = false } = {}) => { - // delete all js files that have a ts file of the same name - // and simply rename other js files to ts +module.exports = (api, { tsLint = false, convertAllFiles = true } = {}) => { const jsRE = /\.js$/ const excludeRE = /^tests\/e2e\/|(\.config|rc)\.js$/ const convertLintFlags = require('../lib/convertLintFlags') api.postProcessFiles(files => { - for (const file in files) { - if (jsRE.test(file) && !excludeRE.test(file)) { - const tsFile = file.replace(jsRE, '.ts') - if (!files[tsFile]) { - let content = files[file] - if (tsLint) { - content = convertLintFlags(content) + if (convertAllFiles) { + // delete all js files that have a ts file of the same name + // and simply rename other js files to ts + for (const file in files) { + if (jsRE.test(file) && !excludeRE.test(file)) { + const tsFile = file.replace(jsRE, '.ts') + if (!files[tsFile]) { + let content = files[file] + if (tsLint) { + content = convertLintFlags(content) + } + files[tsFile] = content } - files[tsFile] = content + delete files[file] } - delete files[file] } + } else { + // rename only main file to main.ts + const tsFile = api.entryFile.replace(jsRE, '.ts') + let content = files[api.entryFile] + if (tsLint) { + content = convertLintFlags(content) + } + files[tsFile] = content + delete files[api.entryFile] } }) } diff --git a/packages/@vue/cli-plugin-typescript/generator/index.js b/packages/@vue/cli-plugin-typescript/generator/index.js index 55f77531cc..6d3eb045da 100644 --- a/packages/@vue/cli-plugin-typescript/generator/index.js +++ b/packages/@vue/cli-plugin-typescript/generator/index.js @@ -1,7 +1,9 @@ module.exports = (api, { classComponent, tsLint, - lintOn = [] + lintOn = [], + convertJsToTs, + allowJs }, _, invoking) => { if (typeof lintOn === 'string') { lintOn = lintOn.split(',') @@ -82,5 +84,5 @@ module.exports = (api, { hasJest: api.hasPlugin('unit-jest') }) - require('./convert')(api, { tsLint }) + require('./convert')(api, { tsLint, convertJsToTs }) } diff --git a/packages/@vue/cli-plugin-typescript/generator/template/tsconfig.json b/packages/@vue/cli-plugin-typescript/generator/template/tsconfig.json index 6e3ea40371..827e958b2a 100644 --- a/packages/@vue/cli-plugin-typescript/generator/template/tsconfig.json +++ b/packages/@vue/cli-plugin-typescript/generator/template/tsconfig.json @@ -9,6 +9,9 @@ <%_ if (options.classComponent) { _%> "experimentalDecorators": true, <%_ } _%> + <%_ if (options.allowJs) { _%> + "allowJs": true, + <%_ } _%> "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, diff --git a/packages/@vue/cli-plugin-typescript/prompts.js b/packages/@vue/cli-plugin-typescript/prompts.js index 49ff4c97f0..d47fa3306e 100644 --- a/packages/@vue/cli-plugin-typescript/prompts.js +++ b/packages/@vue/cli-plugin-typescript/prompts.js @@ -36,6 +36,18 @@ const prompts = module.exports = [ value: 'commit' } ] + }, + { + name: `convertJsToTs`, + type: `confirm`, + message: `Convert all .js files to .ts?`, + default: true + }, + { + name: `allowJs`, + type: `confirm`, + message: `Allow .js files to be compiled?`, + default: false } ]