美文网首页
2023-01-11 编译ts的多种方式

2023-01-11 编译ts的多种方式

作者: FConfidence | 来源:发表于2023-01-11 22:46 被阅读0次

    三种方式处理

    1. babel-loader 编译ts (@babel/preset-typescript)
    2. ts-loader
    3. tsc

    1. babel-loader 通过babelrc文件配置 @babel/preset-typescript 处理ts

    以webpack为例

    // webpack配置
     {
            test: /\.tsx?$/,
            loader: "babel-loader",
            exclude: /node_modules/,
    },
    
    //  babel.config.js
    module.exports = {
      presets: [
        [
          "@babel/preset-env",
        ],
        "@babel/preset-react",
        "@babel/preset-typescript",
      ],
      plugins: [["@babel/plugin-transform-runtime"]],
    };
    

    rollup使用@rollup/plugin-babel 插件使用 @babel/preset-typescript编译ts

    import babel from "@rollup/plugin-babel";
    const extensions = ["*", ".js", ".ts"]
    
    export default {
      input: "./src-ts/index.ts", // 表示以哪个文件作为打包的入口
      output: {
        file: "dist/dist-ts/ts-vue.js",
        name: "TsVue", // 指定打包后全局变量的名字 (会在全局上增加一个Vue属性) global.Vue
        format: "umd", // 表示统一模块规范 esm,cjs,iife, umd(统一模块规范 cjs+amd)
        sourcemap: true, // 将es6转化为es5后的源码调试 (希望可以调试)
      },
      plugins: [
        babel({
          // 不会走babelrc文件
          babelrc: false,
          extensions,
          exclude: "node_modules/**",
          presets: [
            "@babel/preset-env",
            "@babel/preset-react",
            "@babel/preset-typescript",
          ],
        }),
      ],
    };
    
    

    rollup使用@rollup/plugin-typescript编译typescript

    import resolve from "@rollup/plugin-node-resolve";
    import commonjs from "@rollup/plugin-commonjs";
    import typescript from "@rollup/plugin-typescript";
    
    export default {
      input: "./src-ts/index.ts", // 表示以哪个文件作为打包的入口
      output: {
        file: "dist/umd/ts-vue.js",
        name: "TsVue", // 指定打包后全局变量的名字 (会在全局上增加一个Vue属性) global.Vue
        format: "umd", // 表示统一模块规范 esm,cjs,iife, umd(统一模块规范 cjs+amd)
        sourcemap: true, // 将es6转化为es5后的源码调试 (希望可以调试)
      },
      plugins: [
        resolve(),
        commonjs(),
        typescript(),
      ],
    };
    
    

    2. 使用ts-loader

    以webpack为例

    // webpack.config.js
    const path = require("path");
    
    module.exports = {
      entry: "./src/index.ts",
      output: {
        path: path.join(__dirname, "/dist"),
        publicPath: "/",
        filename: "index.js",
        library: "myNpm",
        libraryTarget: "umd",
        libraryExport: "default",
      },
      resolve: {
        extensions: [".ts", ".tsx", ".json", ".js"],
      },
      module: {
        rules: [
          {
            test: /\.tsx?$/,
            use: [
              {
                loader: "ts-loader",
                // options: {
                //   // 指定特定的ts编译配置,为了区分脚本的ts配置
                //   configFile: path.resolve(__dirname, "./tsconfig.json"),
                // },
              },
            ],
            exclude: /node_modules/,
          },
          {
            test: /\.js?$/,
            loader: "babel-loader",
            exclude: /node_modules/,
          },
        ],
      },
      // ...
    };
    

    3. tsc对文件进行编译

    npm install typescript --save-dev

    package.json scripts 添加如下命令, 通过tsc编译ts文件

    "scripts": {
        "tsc:types": "tsc -p tsconfig.json --emitDeclarationOnly --outDir tsc-types",
        "tsc:esm": "tsc --project tsconfig.json --module es2015 --outDir tsc-esm",
        "tsc:cjs": "tsc --project tsconfig.json --outDir tsc-cjs",
        "ts-check": "tsc -p tsconfig.json --noEmit",
    }
    

    相关文章

      网友评论

          本文标题:2023-01-11 编译ts的多种方式

          本文链接:https://www.haomeiwen.com/subject/eixbcdtx.html