为什么不把项目完全用ts重构?
我手头的项目的基于vue2的,而且项目比较重,重构花费的成本比较高,所以考虑采用渐进式的方式,先将部分代码用ts实现,后期逐渐全面实现TS。
升级过程
安装 typescript ts-loader
修改webpack 配置
// build/webpack.base.conf.js
module.exports = {
/** 其他与本次改动无关的配置 */
resolve: {
/** other code */
extensions: ['.js', '.vue', '.json', '.ts'], // 添加 .ts 扩展名
},
module: {
rules: [
/** other code */
{
test: /\.tsx?$/,
use: [
{ loader: 'babel-loader' },
{
loader: 'ts-loader',
exclude: /node_modules/,
options: {
transpileOnly: true,
appendTsSuffixTo: [
'\\.vue$'
],
happyPackMode: false
}
}
]
}
]
}
}
配置tsconfig
// tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"importHelpers": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"baseUrl": ".",
"types": [
"webpack-env"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
"src/**/*.js", // 这里需要注意
],
"exclude": [
"node_modules"
],
}
⚠️,上面的配置中 include 李的路径排列顺序会影响ts-loader 识别优先级,
比如在一个文件中引入 一个./tools
如果配置文件中include 中 “src//*.ts”, 排在前面,./tools 会默认寻找 tools.ts 文件
如果”src//*.js” 排在前面 ./tools 会默认寻找 tools.js 文件
参考:https://onlymisaky.gitee.io/2019/12/27/#%E9%85%8D%E7%BD%AE-tsconfig-json