fix: ts generator & airbnb import/extensions rule compatibility

fix #871
This commit is contained in:
Evan You
2018-02-28 17:53:48 -05:00
parent f4d1841723
commit 88726a3c60
3 changed files with 23 additions and 20 deletions

View File

@@ -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]
}

View File

@@ -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}`
})
}

View File

@@ -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'
}]
}
}