babel7,babel-loader如何解析vue文件里的ts

ts-loader可通过配置appendTsSuffixTo: [/.vue$/],
那升级用babel7后怎么解析呢?
目前我的webpack是如下配置,但ts的类型注解解析不了
clipboard.png

阅读 10.7k
1 个回答
  • babel-loader 要支持typescript需要引入@babel/preset-typescript, 且应该配置allExtensions选项
  • vue文件需要通过vue-loader中转到babel

完整配置代码

const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
  mode: 'development',
  entry: './index.vue',
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'bundle.js',
  },
  resolve: {
    extensions: ['.ts', '.tsx'],
  },
  module: {
    rules: [
      {
        test: /\.vue$/,                     // 处理vue文件,会将lang="ts"的代码,转交给babel-loader
        loader: 'vue-loader',
      },
      {
        test: /\.tsx?$/,
        loader: 'babel-loader',
        options: {
          presets: [
            '@babel/preset-env',
            [
              '@babel/preset-typescript',   // 引用Typescript插件
              {
                allExtensions: true,        // ?支持所有文件扩展名
              },
            ],
          ],
        },
      },
    ],
  },
  plugins: [
    // make sure to include the plugin!
    new VueLoaderPlugin(),
  ],
};

index.vue

<script lang="ts">
let a: number = 1;

console.log(a);
</script>
推荐问题