为什么不把项目完全用ts重构?
我手头的项目的基于vue2的,而且项目比较重,重构花费的成本比较高,所以考虑采用渐进式的方式,先将部分代码用ts实现,后期逐渐全面实现TS。
升级过程
安装 typescript ts-loader
修改webpack 配置
// build/webpack.base.conf.jsmodule.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
