这一节课真是学得云里雾里,不知道手动的梳理一遍会不会好一点。

一、打包工具webpack所起到的作用。

        从达到的效果去学习一个东西最快,如果连自己学的是什么都不知道,那更难理解每一步的步骤。webpack在TS的编译中所起到的作用是将整个TS代码项目进行托管,代码书写完成后,可以很方便的对整个项目进行打包,调试,比上一节的tsc命令编译指定文件夹的TS文件更加智能、复杂。

二、环境搭建步骤。

(1)在项目目录的命令行模式下,使用命令

npm init -y

对整个项目生成配置文件,也称为配置文件初始化。文件名为package.json。里面有各个模块的版本号,以及各种代码信息,以键值对的形式保存。

(2)继续安装webpack模块并配置

npm install -D webpack webpack-cli typescript ts-loader

安装完模块后,需要对webpack进行配置,否则系统怎么知道我们想怎么编译呢?这时候新建一个webpack.config.js文件,在里面写上属性。包括入口文件、打包文件目录、打包时使用的规则。

// 引入包进行路径拼接
const path = require('path')

// webpack配置信息
module.exports = {
    // 入口文件
    entry: "./src/index.ts",
    // 要打包的文件目录
    output: {
        // 打包文件的目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后的文件
        filename: "bundle.js"
    },
    // webpack打包时使用的模块
    module: {
        // 加载规则
        rules: [
            {
                // 使用该规则的文件 正则匹配
                test: /\.ts$/,
                use: 'ts-loader',
                // 不使用规则的文件夹
                exclude: /node_modules/
            }
        ]
    }
}

(3)加载html模板并配置

这一步骤的作用是将编译后的js文件自动插入到html文件中,人工去创建引入太麻烦了,因此需要这个工具,首先是安装。

npm install -D html-webpack-plugin

然后配置还是写在第二步webpack的配置文件里。看HTMLWebpackPlugin是怎么引入的就行。

// 引入包进行路径拼接
const path = require('path')
// 引入html插件(打包后自动生成html文件)
const HTMLWebpackPlugin = require("html-webpack-plugin")

// webpack配置信息
module.exports = {
    // 入口文件
    entry: "./src/index.ts",
    // 要打包的文件目录
    output: {
        // 打包文件的目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后的文件
        filename: "bundle.js"
    },
    // webpack打包时使用的模块
    module: {
        // 加载规则
        rules: [
            {
                // 使用该规则的文件 正则匹配
                test: /\.ts$/,
                use: 'ts-loader',
                // 不使用规则的文件夹
                exclude: /node_modules/
            }
        ]
    },
    plugins: [
        new HTMLWebpackPlugin({
            template: "./src/index.html"
        })
    ]
}

(4)clean-webpack-plugin安装以及配置

这个模块用来编译前清空所有上一次编译的代码文件,这样可以更加干净,确保新编译的为最新数据。使用命令安装。

npm install -D clean-webpack-plugin

然后在webpack配置文件里面配置。

引入以及使用:

// 引入包进行路径拼接
const path = require('path')
// 引入html插件(打包后自动生成html文件)
const HTMLWebpackPlugin = require("html-webpack-plugin")
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
// webpack配置信息
module.exports = {
    // 入口文件
    entry: "./src/index.ts",
    // 要打包的文件目录
    output: {
        // 打包文件的目录
        path: path.resolve(__dirname, 'dist'),
        // 打包后的文件
        filename: "bundle.js"
    },
    // webpack打包时使用的模块
    module: {
        // 加载规则
        rules: [
            {
                // 使用该规则的文件 正则匹配
                test: /\.ts$/,
                use: 'ts-loader',
                // 不使用规则的文件夹
                exclude: /node_modules/
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(),
        new HTMLWebpackPlugin({
            template: "./src/index.html"
        })
    ]
}

(5)设置引用模块。

为了让TS暴露出的变量可以让别人引用,需要设置引用模块。

在plugins的同级属性下,添加

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

(6)设置打包命令

在package.json里面scripts属性里添加如下,这样使用命令npm run build就可以实现打包。

"scripts": {
   "build": "webpack",
    
  }

(7)热部署

热部署就是为了实现代码改动,页面也同步发生改变,可以起到快速调试的效果。先安装

npm install -D webpack-dev-server

之后在第六步的同一个位置添加命令。最终配置:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "start": "webpack server --open chrome.exe"
  },

三、总结

第一次学习webpack,非常麻烦,还得多练习几遍才能掌握。