mirror of
https://github.com/nuxt/nuxt.git
synced 2024-12-02 10:27:15 +00:00
feat(ts): provide type checking through fork-ts-checker-webpack-plugin
(#4611)
This commit is contained in:
parent
8dc15d07b7
commit
f1377a7f8d
@ -49,6 +49,7 @@
|
|||||||
"esm": "^3.0.84",
|
"esm": "^3.0.84",
|
||||||
"express": "^4.16.4",
|
"express": "^4.16.4",
|
||||||
"finalhandler": "^1.1.1",
|
"finalhandler": "^1.1.1",
|
||||||
|
"fork-ts-checker-webpack-plugin": "^0.5.2",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"get-port": "^4.1.0",
|
"get-port": "^4.1.0",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
@ -75,6 +76,7 @@
|
|||||||
"rollup-plugin-replace": "^2.1.0",
|
"rollup-plugin-replace": "^2.1.0",
|
||||||
"sort-package-json": "^1.17.1",
|
"sort-package-json": "^1.17.1",
|
||||||
"ts-loader": "^5.3.2",
|
"ts-loader": "^5.3.2",
|
||||||
|
"tslint": "^5.12.0",
|
||||||
"typescript": "^3.2.2",
|
"typescript": "^3.2.2",
|
||||||
"vue-jest": "^3.0.2",
|
"vue-jest": "^3.0.2",
|
||||||
"vue-property-decorator": "^7.2.0"
|
"vue-property-decorator": "^7.2.0"
|
||||||
|
@ -53,6 +53,7 @@ export default () => ({
|
|||||||
},
|
},
|
||||||
vueStyle: {}
|
vueStyle: {}
|
||||||
},
|
},
|
||||||
|
useForkTsChecker: false,
|
||||||
styleResources: {},
|
styleResources: {},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
terser: {},
|
terser: {},
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
import fs from 'fs'
|
||||||
|
import consola from 'consola'
|
||||||
import webpack from 'webpack'
|
import webpack from 'webpack'
|
||||||
import HTMLPlugin from 'html-webpack-plugin'
|
import HTMLPlugin from 'html-webpack-plugin'
|
||||||
import BundleAnalyzer from 'webpack-bundle-analyzer'
|
import BundleAnalyzer from 'webpack-bundle-analyzer'
|
||||||
@ -132,6 +134,24 @@ export default class WebpackClientConfig extends WebpackBaseConfig {
|
|||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TypeScript type checker
|
||||||
|
// Only performs once per client compilation and only if `ts-loader` checker is not used (transpileOnly: true)
|
||||||
|
if (this.loaders.ts.transpileOnly && this.options.build.useForkTsChecker) {
|
||||||
|
const forkTsCheckerResolvedPath = this.nuxt.resolver.resolveModule('fork-ts-checker-webpack-plugin')
|
||||||
|
if (forkTsCheckerResolvedPath) {
|
||||||
|
const ForkTsCheckerWebpackPlugin = require(forkTsCheckerResolvedPath)
|
||||||
|
plugins.push(new ForkTsCheckerWebpackPlugin(Object.assign({
|
||||||
|
vue: true,
|
||||||
|
tsconfig: path.resolve(this.options.rootDir, 'tsconfig.json'),
|
||||||
|
// https://github.com/Realytics/fork-ts-checker-webpack-plugin#options - tslint: boolean | string - So we set it false if file not found
|
||||||
|
tslint: (tslintPath => fs.existsSync(tslintPath) && tslintPath)(path.resolve(this.options.rootDir, 'tslint.json')),
|
||||||
|
formatter: 'codeframe'
|
||||||
|
}, this.options.build.useForkTsChecker)))
|
||||||
|
} else {
|
||||||
|
consola.warn('You need to install `fork-ts-checker-webpack-plugin` as devDependency to enable TypeScript type checking !')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
|
import path from 'path'
|
||||||
|
import consola from 'consola'
|
||||||
|
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'
|
||||||
|
|
||||||
export default function typeScriptModule() {
|
export default function typeScriptModule() {
|
||||||
// Add .ts extension for store, middleware and more
|
// Add .ts extension for store, middleware and more
|
||||||
this.nuxt.options.extensions.push('ts')
|
this.nuxt.options.extensions.push('ts')
|
||||||
|
|
||||||
// Extend build
|
// Extend build
|
||||||
this.extendBuild((config) => {
|
this.extendBuild((config, { isClient }) => {
|
||||||
// Add TypeScript loader
|
// Add TypeScript loader
|
||||||
config.module.rules.push({
|
config.module.rules.push({
|
||||||
test: /\.ts$/,
|
test: /\.ts$/,
|
||||||
@ -15,5 +19,14 @@ export default function typeScriptModule() {
|
|||||||
})
|
})
|
||||||
// Add .ts extension in webpack resolve
|
// Add .ts extension in webpack resolve
|
||||||
config.resolve.extensions.push('.ts')
|
config.resolve.extensions.push('.ts')
|
||||||
|
|
||||||
|
if (isClient) {
|
||||||
|
config.plugins.push(new ForkTsCheckerWebpackPlugin({
|
||||||
|
vue: true,
|
||||||
|
tsconfig: path.resolve(this.options.srcDir, 'tsconfig.json'),
|
||||||
|
tslint: false,
|
||||||
|
logger: consola
|
||||||
|
}))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"noImplicitAny": true,
|
"noImplicitAny": false,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
|
7
test/fixtures/typescript/nuxt.config.js
vendored
7
test/fixtures/typescript/nuxt.config.js
vendored
@ -1,3 +1,10 @@
|
|||||||
|
import consola from 'consola'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
build: {
|
||||||
|
useForkTsChecker: {
|
||||||
|
logger: consola
|
||||||
|
}
|
||||||
|
},
|
||||||
plugins: ['~/plugins/plugin']
|
plugins: ['~/plugins/plugin']
|
||||||
}
|
}
|
||||||
|
7
test/fixtures/typescript/tsconfig.json
vendored
7
test/fixtures/typescript/tsconfig.json
vendored
@ -10,13 +10,16 @@
|
|||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"noImplicitAny": true,
|
"noImplicitAny": false,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"~/*": ["./*"]
|
"~/*": ["./*"]
|
||||||
}
|
},
|
||||||
|
"types": [
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
45
yarn.lock
45
yarn.lock
@ -2015,7 +2015,7 @@ aws4@^1.8.0:
|
|||||||
resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
|
resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
|
||||||
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
|
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
|
||||||
|
|
||||||
babel-code-frame@^6.26.0:
|
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
|
||||||
version "6.26.0"
|
version "6.26.0"
|
||||||
resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
||||||
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
|
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
|
||||||
@ -2505,7 +2505,7 @@ buffer@^4.3.0:
|
|||||||
ieee754 "^1.1.4"
|
ieee754 "^1.1.4"
|
||||||
isarray "^1.0.0"
|
isarray "^1.0.0"
|
||||||
|
|
||||||
builtin-modules@^1.0.0:
|
builtin-modules@^1.0.0, builtin-modules@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||||
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
|
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
|
||||||
@ -2974,7 +2974,7 @@ commander@2.17.x, commander@~2.17.1:
|
|||||||
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||||
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
|
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
|
||||||
|
|
||||||
commander@^2.18.0, commander@^2.19.0:
|
commander@^2.12.1, commander@^2.18.0, commander@^2.19.0:
|
||||||
version "2.19.0"
|
version "2.19.0"
|
||||||
resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
||||||
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
|
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
|
||||||
@ -4896,6 +4896,18 @@ forever-agent@~0.6.1:
|
|||||||
resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||||
|
|
||||||
|
fork-ts-checker-webpack-plugin@^0.5.2:
|
||||||
|
version "0.5.2"
|
||||||
|
resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.5.2.tgz#a73b3630bd0a69409a6e4824e54c03a62fe82d8f"
|
||||||
|
integrity sha512-a5IG+xXyKnpruI0CP/anyRLAoxWtp3lzdG6flxicANnoSzz64b12dJ7ASAVRrI2OaWwZR2JyBaMHFQqInhWhIw==
|
||||||
|
dependencies:
|
||||||
|
babel-code-frame "^6.22.0"
|
||||||
|
chalk "^2.4.1"
|
||||||
|
chokidar "^2.0.4"
|
||||||
|
micromatch "^3.1.10"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
tapable "^1.0.0"
|
||||||
|
|
||||||
form-data@~2.3.2:
|
form-data@~2.3.2:
|
||||||
version "2.3.3"
|
version "2.3.3"
|
||||||
resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||||
@ -10976,11 +10988,36 @@ tsconfig@^7.0.0:
|
|||||||
strip-bom "^3.0.0"
|
strip-bom "^3.0.0"
|
||||||
strip-json-comments "^2.0.0"
|
strip-json-comments "^2.0.0"
|
||||||
|
|
||||||
tslib@^1.9.0:
|
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
|
||||||
version "1.9.3"
|
version "1.9.3"
|
||||||
resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||||
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
|
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
|
||||||
|
|
||||||
|
tslint@^5.12.0:
|
||||||
|
version "5.12.0"
|
||||||
|
resolved "https://registry.npmjs.org/tslint/-/tslint-5.12.0.tgz#47f2dba291ed3d580752d109866fb640768fca36"
|
||||||
|
integrity sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ==
|
||||||
|
dependencies:
|
||||||
|
babel-code-frame "^6.22.0"
|
||||||
|
builtin-modules "^1.1.1"
|
||||||
|
chalk "^2.3.0"
|
||||||
|
commander "^2.12.1"
|
||||||
|
diff "^3.2.0"
|
||||||
|
glob "^7.1.1"
|
||||||
|
js-yaml "^3.7.0"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
resolve "^1.3.2"
|
||||||
|
semver "^5.3.0"
|
||||||
|
tslib "^1.8.0"
|
||||||
|
tsutils "^2.27.2"
|
||||||
|
|
||||||
|
tsutils@^2.27.2:
|
||||||
|
version "2.29.0"
|
||||||
|
resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
|
||||||
|
integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.8.1"
|
||||||
|
|
||||||
tty-browserify@0.0.0:
|
tty-browserify@0.0.0:
|
||||||
version "0.0.0"
|
version "0.0.0"
|
||||||
resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
||||||
|
Loading…
Reference in New Issue
Block a user