TypeScript 第八天,TypeScript中使用Babel

146 阅读1分钟

经过一系列的配置,使得TS和webpack已经结合到了一起,除了webpack,开发中还经常需要结合babel来对代码进行转换以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将babel引入到项目中。我们接下来看如何使用Babel

安装依赖包

在我们命令行工具中输入,以下指令

npm i -D @babel/core @babel/preset-env babel-loader core-js

共安装了4个包,分别是:

@babel/core

这个包是babel的核心工具

@babel/preset-env

babel的预定义环境

@babel-loader

babelwebpack中的加载器

core-js

core-js用来使老版本的浏览器支持新版ES语法

修改webpack.config.js配置文件

...略...
module: {
    rules: [
        {
            test: /\.ts$/,
            use: [
                {
                    loader: "babel-loader",
                    options:{
                        presets: [
                            [
                                "@babel/preset-env",
                                {
                                    "targets":{
                                        "chrome": "58",
                                        "ie": "11"
                                    },
                                    "corejs":"3",
                                    "useBuiltIns": "usage"
                                }
                            ]
                        ]
                    }
                },
                {
                    loader: "ts-loader",

                }
            ],
            exclude: /node_modules/
        }
    ]
}
...略...

如此一来,使用ts编译后的文件将会再次被babel处理,使得代码可以在大部分浏览器中直接使用,可以在配置选项的targets中指定要兼容的浏览器版本。 最后再详细贴上webpack.config.js的配置项包含其注释,如下所示:

// 引入一个包
const path = require('path');
// 引入html插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 引入 clean插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
// const { Extension } = require('typescript');
// webpack的配置信息都应该协助moudle.exports中
module.exports = {
    mode:'development', // 指定当前的模式
    // 指定入口文件
    entry: './src/index.ts',

    // 缓存配置
    cache: {
        type: 'filesystem', // 使用文件系统缓存
        buildDependencies: {
          // 配置构建依赖项,例如package.json文件或配置文件的变化应该使缓存失效
          config: [__filename]
        },
        // 可以设置更详细的缓存策略,例如使用hash来控制缓存失效等
      },
    // 指定打包文件所在的目录
    output:{
        // 指定打包的目录
        path:path.resolve(__dirname,'dist'), // 表示当前文件所在目录
        // 打包好的文件名
        filename:'bundle.js',
        // 告诉webpack不使用箭头函数
        environment:{
            arrowFunction:false
        }
    },
    // 指定webpack打包时要使用的模块
    module:{
        // 指定要加载的规则
        rules:[
            {
            // test指定的是规定生效的文件
            test:/\.ts$/,
            // 要使用的loader
            use:[
                
                // 配置babel
                {
                    // 指定加载器
                    loader:'babel-loader',
                    // 设置babel
                    options:{
                        // 设置预定义的环境
                        presets:[
                            [
                                // 指定环境的插件
                                "@babel/preset-env",
                                // 配置信息
                                {
                                    // 要兼容的目标浏览器
                                    targets:{
                                        "chrome":"58",
                                        "ie":"11"
                                    }, 
                                    // 指定corejs的版本
                                    corejs:"3",
                                    // 使用corejs的方法 usage:按需加载
                                    useBuiltIns:"usage"
                                }
                            ]
                        ]
                    }
                },
                'ts-loader',
            ],
            // 排除node_modules下的文件
            exclude:/node_modules/
           }
        ]
    },
    // 配置webpack插件
    plugins:[
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            // title:"这是一个自定义的title"
            template:'./src/index.html'
        }),
    ],
    // 用来设置引用模块
    resolve:{
        extensions:['.ts','.js'],
    }
}

好了今天就介绍到这里,我们下次见,感谢大家观看