Young Kbt blog Young Kbt blog
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)

Shp Liu

朝圣的使徒,正在走向编程的至高殿堂!
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)
  • 超文本标记语言 - Html

  • 解释编程语言 - JavaScript

  • JS 超集语言 - TypeScript

    • TypeScript - 介绍
    • TypeScript - 安装和使用
    • TypeScript - 基本类型
    • TypeScript - 编译和配置
    • TypeScript - 文件打包
      • Webpack 整合
        • 初始化项目
        • 下载构建工具
        • 配置 webpack
        • 配置 TS 编译选项
        • 修改 package.json 配置
        • 项目使用
      • Webpack 常用插件
        • html-webpack-plugin
        • webpack-dev-server
        • clean-webpack-plugin
      • Babel
    • TypeScript - 接口
    • TypeScript - 函数
    • TypeScript - 类
    • TypeScript - 泛型
    • TypeScript - 类型推断
    • TypeScript - 高级类型
    • TypeScript Office - 入门
    • TypeScript Office - 常用类型
    • TypeScript Office - 类型缩小
    • TypeScript Office - 更多函数
    • TypeScript Office - 对象类型
    • TypeScript Office - 类型操纵
    • TypeScript Office - 类
    • TypeScript Office - 模块
    • TypeScript Office - 变量声明
    • TypeScript Office - 类型推断
    • TypeScript Office - 枚举
    • TypeScript Office - 公共类型
    • TypeScript Office - Symbols
    • TypeScript Office - 类型兼容性
    • TypeScript Office - 迭代器和生成器
    • TypeScript Office - 装饰器
    • TypeScript Office - JSX
    • TypeScript Office - 混入
    • TypeScript Office - 三斜线指令
    • TypeScript Office - 模块进阶
    • TypeScript Office - 模块解析
    • TypeScript Office - 命名空间
    • TypeScript Office - 命名空间与模块
    • TypeScript Office - 声明合并
  • 界面构建框架 - React

  • 渐进式框架 - Vue2

  • 渐进式框架 - Vue3

  • 前端
  • JS 超集语言 - TypeScript
Young Kbt
2022-09-08
目录

TypeScript - 文件打包

  • Webpack 整合
    • 初始化项目
    • 下载构建工具
    • 配置 webpack
    • 配置 TS 编译选项
    • 修改 package.json 配置
    • 项目使用
  • Webpack 常用插件
    • html-webpack-plugin
    • webpack-dev-server
    • clean-webpack-plugin
  • Babel

# Webpack 整合

通常情况下,实际开发中我们都需要使用构建工具对代码进行打包。

TS 同样也可以结合构建工具一起使用,下边以 Webpack 为例介绍一下如何结合构建工具使用 TS。

步骤如下:

# 初始化项目

进入项目根目录,执行命令 npm init -y,创建 package.json 文件。

# 下载构建工具

命令如下:

npm i -D webpack webpack-cli webpack-dev-server typescript ts-loader clean-webpack-plugin
1

共安装了 7 个包:

  • webpack:构建工具 webpack
  • webpack-cli:webpack 的命令行工具
  • webpack-dev-server:webpack 的开发服务器
  • typescript:ts 编译器
  • ts-loader:ts 加载器,用于在 webpack 中编译 ts 文件
  • html-webpack-plugin:webpack 中 html 插件,用来自动创建 html 文件
  • clean-webpack-plugin:webpack 中的清除插件,每次构建都会先清除目录

# 配置 webpack

根目录下创建 webpack 的配置文件 webpack.config.js:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

module.exports = {
   optimization:{
       minimize: false // 关闭代码压缩,可选
   },

   entry: "./src/index.ts",

   devtool: "inline-source-map",

   devServer: {
       contentBase: './dist'
   },

   output: {
       path: path.resolve(__dirname, "dist"),
       filename: "bundle.js",
       environment: {
           arrowFunction: false // 关闭webpack的箭头函数,可选
       }
   },

   resolve: {
       extensions: [".ts", ".js"]
   },

   module: {
       rules: [
           {
               test: /\.ts$/,
               use: {
                   loader: "ts-loader"     
               },
               exclude: /node_modules/
           }
       ]
   },

   plugins: [
       new CleanWebpackPlugin(),
       new HtmlWebpackPlugin({
           title:'TS测试'
       }),
   ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 配置 TS 编译选项

根目录下创建 tsconfig.json,配置可以根据自己需要

{
   "compilerOptions": {
       "target": "ES2015",
       "module": "ES2015",
       "strict": true
   }
}
1
2
3
4
5
6
7

# 修改 package.json 配置

修改 package.json 添加如下配置

{
   // ...
   "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1",
       "build": "webpack",
       "start": "webpack serve --open chrome.exe"
   },
   // ...
}
1
2
3
4
5
6
7
8
9

# 项目使用

在 src 下创建 ts 文件,并在并命令行执行 npm run build 对代码进行编译。

或者执行 npm start 来启动开发服务器。

# Webpack 常用插件

# html-webpack-plugin

html 插件能帮助我们在打包时自动地生成 html 文件,在上面的基础上进行配置该插件:

// 引入一个包
const path = require('path');
// 引入 html 插件
const HTMLWebpackPlugin = require('html-webpack-plugin');

// Webpack 中所有的配置信息都应该写在 module.exports 中
module.exports = {

    // 指定入口文件
    entry: "./src/index.ts",

    // 指定打包文件所在目录
    output: {
        // 指定打包文件的目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后文件的名字
        filename: "bundle.js",
        //告诉 Webpack 不使用箭头函数
        environment: {
            arrowFunction: false
        }

    },
    // 指定 Webpack 打包时要使用的模块
    module: {
        // 指定要 loader 加载的规则
        rules: [
            {
                // test 指定的是规则生效的文件
                test: /\.ts$/,//以 ts 结尾的文件
                // 要使用的 loader
                use: 'ts-loader',
                // 要排除的文件
                exclude: /node-modules/
            }
        ]
    },
    
    //配置 Webpack 插件
    plugins: [
        new HTMLWebpackPlugin({
            // title: "这是一个自定义的title"、
            template: "./src/index.html" 
        }),
    ],
    
    // 用来设置引用模块,可以将这些文件识别为模块
    resolve: {
        extensions: ['.ts', '.js']
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

# webpack-dev-server

该插件能自动响应浏览器更新。

安装:

npm i -D webpack-dev-server
1

在 package.json 中加上 start 命令:

"start": "webpack serve --open chrome.exe"
1

这样,就能在开发时实现热部署了。

# clean-webpack-plugin

clean 插件能在 build 前清空 dist 目录所有文件,避免旧文件的遗留。

安装:

npm i -D clean-webpack-plugin
1

使用

// 引入一个包
const path = require('path');
// 引入html插件
const HTMLWebpackPlugin = require('html-webpack-plugin');
//引入 clean 插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

// Webpack 中所有的配置信息都应该写在 module.exports 中
module.exports = {

    // 指定入口文件
    entry: "./src/index.ts",

    // 指定打包文件所在目录
    output: {
        // 指定打包文件的目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后文件的名字
        filename: "bundle.js",
        // 告诉 Webpack 不使用箭头函数
        environment: {
            arrowFunction: false
        }

    },
    // 指定 Webpack 打包时要使用的模块
    module: {
        // 指定要 loader 加载的规则
        rules: [
            {
                // test 指定的是规则生效的文件
                test: /\.ts$/, // 以 ts 结尾的文件
                // 要使用的 loader
                use: 'ts-loader',
                // 要排除的文件
                exclude: /node-modules/
            }
        ]
    },
    
    // 配置 Webpack 插件
    plugins: [
    	new CleanWebpackPlugin(),
        new HTMLWebpackPlugin({
            // title: "这是一个自定义的title"、
            template: "./src/index.html" 
        }),
    ],
    
    // 用来设置引用模块,可以将这些文件识别为模块
    resolve: {
        extensions: ['.ts', '.js']
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# Babel

除了 Webpack,开发中还经常需要结合 babel 来对代码进行转换;

以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将 babel 引入到项目中。

虽然 TS 在编译时也支持代码转换,但是只支持简单的代码转换;

对于例如:Promise 等 ES6 特性,TS 无法直接转换,这时还要用到 babel 来做转换。

安装依赖包:

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

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

  • @babel/core:babel 的核心工具

  • @babel/preset-env:babel 的预定义环境

  • @babel-loader:babel 在 webpack 中的加载器

  • 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/
    }
  ]
}
// ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

如此一来,使用 ts 编译后的文件将会再次被 babel 处理。使得代码可以在大部分浏览器中直接使用。同时可以在配置选项的 targets 中指定要兼容的浏览器版本。

这样,Webpack 的基本配置就完成了,也是项目开发中常用的配置。下面是整合后的 最终配置文件,开发时可以根据这个来做修改。

// 指定 Webpack 打包时要使用的模块
module: {
  // 指定要 loader 加载的规则
  rules: [
    {
      // test 指定的是规则生效的文件
      test: /\.ts$/, // 以 ts 结尾的文件
      // 要使用的 loader
      use: [
        // 配置 babel
        {
          // 指定加载器
          loader: "babel-loader",
          // 设置 babel
          options: {
            // 设置预定义的环境
            presets: [
              [
                // 指定环境的插件
                "@babel/preset-env",
                // 配置信息
                {
                  // 要兼容的目标浏览器及版本
                  targets: {
                    "chrome": "58",
                    "ie": "11"
                  },
                  // 指定 corejs 的版本(根据 package.json 中的版本,只写整数)
                  "corejs": "3",
                  // 使用 corejs 的方式 "usage" 表示按需加载
                  "useBuiltIns": "usage" 
                }

              ]
            ]
          }
        },
        // 'babel-loader', // 简化版的配置
        'ts-loader'
      ],
      // 要排除的文件
      exclude: /node-modules/
    }
  ]
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
编辑此页 (opens new window)
#TypeScript
更新时间: 2023/09/18, 16:34:13
TypeScript - 编译和配置
TypeScript - 接口

← TypeScript - 编译和配置 TypeScript - 接口→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Young Kbt | blog
桂ICP备2021009994号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式