From 88726a3c6011a45c141c75d84c813a495eeed9ff Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 28 Feb 2018 17:53:48 -0500 Subject: [PATCH] fix: ts generator & airbnb import/extensions rule compatibility fix #871 --- .../cli-plugin-typescript/generator/index.js | 9 ++++++--- .../lib/convertImports.js | 16 ---------------- packages/@vue/eslint-config-airbnb/index.js | 18 +++++++++++++++++- 3 files changed, 23 insertions(+), 20 deletions(-) delete mode 100644 packages/@vue/cli-plugin-typescript/lib/convertImports.js diff --git a/packages/@vue/cli-plugin-typescript/generator/index.js b/packages/@vue/cli-plugin-typescript/generator/index.js index 60f2d05bd..d86b175aa 100644 --- a/packages/@vue/cli-plugin-typescript/generator/index.js +++ b/packages/@vue/cli-plugin-typescript/generator/index.js @@ -46,7 +46,7 @@ module.exports = (api, { } } - if (tsLint && !api.hasPlugin('eslint')) { + if (tsLint) { api.extendPackage({ scripts: { lint: 'vue-cli-service lint' @@ -114,13 +114,16 @@ module.exports = (api, { const jsRE = /\.js$/ const excludeRE = /^test\/e2e\/|\.config\.js$/ const convertLintFlags = require('../lib/convertLintFlags') - const convertImports = require('../lib/convertImports') api.postProcessFiles(files => { for (const file in files) { if (jsRE.test(file) && !excludeRE.test(file)) { const tsFile = file.replace(jsRE, '.ts') if (!files[tsFile]) { - files[tsFile] = convertLintFlags(convertImports(files[file])) + let content = files[file] + if (tsLint) { + content = convertLintFlags(content) + } + files[tsFile] = content } delete files[file] } diff --git a/packages/@vue/cli-plugin-typescript/lib/convertImports.js b/packages/@vue/cli-plugin-typescript/lib/convertImports.js deleted file mode 100644 index d8ab084af..000000000 --- a/packages/@vue/cli-plugin-typescript/lib/convertImports.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = function convertImports (file) { - return file - .replace(/import (.*from )?('([^']+)'|"([^"]+)")/g, ($1, $2, $3, $4) => { - const isRelative = $4.charAt(0) === '.' - const isExtensionless = !/\.\w+$/.test($4) - const isJS = /\.js$/.test($4) - const replaced = isRelative - ? isExtensionless - ? $3.replace($4, `${$4}.ts`) - : isJS - ? $3.replace(/\.js('|")$/, '.ts$1') - : $3 - : $3 - return `import ${$2 || ''}${replaced}` - }) -} diff --git a/packages/@vue/eslint-config-airbnb/index.js b/packages/@vue/eslint-config-airbnb/index.js index 9554a675b..7b49726b3 100644 --- a/packages/@vue/eslint-config-airbnb/index.js +++ b/packages/@vue/eslint-config-airbnb/index.js @@ -7,6 +7,22 @@ module.exports = { webpack: { config: require.resolve('@vue/cli-service/webpack.config.js') } - } + }, + 'import/extensions': [ + '.js', + '.jsx', + '.mjs', + '.ts', + '.tsx' + ] + }, + rules: { + 'import/extensions': ['error', 'always', { + js: 'never', + mjs: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never' + }] } }