React 使用ts

安装ts

npm i typescript ts-loader 

配置tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "es6",
    "target": "es5",
    "jsx": "react-jsx",
    "allowJs": true,
    "moduleResolution": "node",
    "baseUrl": "./", // 设置项目根目录为基础路径
    "paths": {
      "@/*": ["src/*"]
    }
  }
}
const path = require('path');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const dirname = __dirname.replace('build','');

module.exports = {
    entry: path.resolve(dirname, 'src/main.jsx'),
    output: {
        filename: '[name].[contenthash].js',
        path: path.resolve(dirname, 'dist'),
        clean: true,
        publicPath: '/'
    },
    resolve: {
        alias: {
            '@': path.join(dirname, 'src'),
        },
        //import后缀引用简写
        extensions: ['.tsx','.jsx','.ts','.js'],
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/,
            },
            {
                test: /\.jsx?$/,
                use: [
                    {
                        loader: 'babel-loader',
                        options: {
                            babelrc: false,
                            presets: [
                                [require.resolve('@babel/preset-react'), { runtime: 'automatic' }],
                                [require.resolve('@babel/preset-env'), { modules: false }],
                            ]
                        }
                    }
                ],
                exclude: /node_modules/,
            },
            {
                test: /\.(png|jpe?g|gif|mp3|svg)$/,
                type: 'asset/resource'
            }

        ],
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: path.resolve(dirname, 'public/index.html')
        })
    ]
};

解决报错

file

npm i @types/react
Posted in React     

Leave a Reply

Your email address will not be published. Required fields are marked *