一、前言
在上一章TypeScript之编译中,我们介绍了怎么去配置TypeScript编译文件,然后使用 tsc的方式去把 TypeScript文件转换为 JavaScript文件
但是在实际的项目开发中,我们不会使用这种方式去编译,而是使用专门的开发工具,本文主要讲解通过打包工具webpack去打包ts文件
二、使用webpack打包ts文件详细过程
初始化配置
新建一个day03文件夹, 然后在终端输入命令 npm init -y 生成package.json配置文件,具体如图所示:
接下来我们输入以下命令安装一下webpack和webpack-cli、typescript、ts-loader
npm i -D webpack webpack-cli typescript ts-loader 复制代码
- webpack: webpack的核心包
- webpack-cli:webpack命令行工具
- typescript: TypeScript核心包
- ts-loader:整合TypeScript和webpack 安装成功之后, 相应的在我们的package.json文件中出现对应的依赖,同时在我们的根目录day03下会出现一个node_modules目录
修改我们的 webpack.config.js文件
// 引入一个包 // 拼接路径 const path = require('path') // webpack中所有的配置信息都应该写在module.exports中 module.exports = { // 指定入口文件 entry: "./src/index.ts", // 指定打包文件所在的目录 output: { // 指定打包文件的目录 path :path.resolve(__dirname, 'dist'), // 打包后文件的名字 filename: "bundle.js" }, // 指定webpack打包时要使用的模块 moudle: { // 指定要加载的规则 rules: [ { // test指定的是规则生效的文件, 以ts结尾的文件 test: /\.ts$/, // 要使用的loader use: 'ts-loader', // 要排除的文件 exclude: /node_modules/ } ] } } 复制代码
修改我们的package.json,添加打包命令build和运行环境 --mode
{ "compilerOptions": { "module": "ES2015", "target": "ES2015", "strict": true } } 复制代码
终端执行命令npm run build 出现如图所示情况则成功
三、webpack相关知识
webpack插件(自动生成html)
安装插件命令如下
npm i -D html-webpack-plugin 复制代码
安装好插件后,在webpack.config.js文件中对其进行配置并重新build打包, 可以看到, 在dist文件夹下除了bundle.js文件之外还生成了一个index.html文件
自定义插件内容
我们打开生成好的index.html文件之后会发现js已经被导入了,但是我们的title是默认的 Webpack App 我们如果想要更改这个要怎么做呢
打开我们的webpack.config.js文件,在配置插件的地方进行个性化修改后重新打包编译
这个插件还可以指定生成的index.html模板, 首先我们在src目录下生成index.html自定义模板,然后在webpack.config.js文件中对插件进行个性化配置, 最后对我们的项目进行build打包,具体实现如下图所示
webpack插件(webpack开发服务器)
这个插件会自动对我们的代码进行重新编译
插件安装命令如下
npm i -D webpack-dev-server 复制代码
安装好了之后,我们需要在package.json中新增start启动命令
安装插件(清除打包目录)
这个插件的作用是在你build打包项目的时候, 会先去清空你的打包目录, 也就是我们的dist目录, 再去打包,避免有旧打包文件影响新的打包文件
请输入以下命令安装插件
npm i -D clean-webpack-plugin 复制代码
四、打包兼容性
因为在实际开发中,我们会碰到不同的浏览器, 为了让我们的代码能够在所有浏览器中都流畅的运行,所以我们要安装以下几个插件,来提高我们代码的兼容性
npm i -D @babel/core @babel/preset-env babel-loader core-js 复制代码
安装成功之后, 我们更改我们的webpack.config.js文件, 配置babel, 指定加载器, 设置兼容的目标浏览器等, 修改后的webpack.config.js文件内容如下
// 引入一个包 // 拼接路径 const path = require('path') // 引入html-webpack-plugin 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: { // 指定要加载的规则 rules: [ { // test指定的是规则生效的文件, 以ts结尾的文件 test: /\.ts$/, // 要使用的loader use: // 配置babel [ { // 指定加载器 loader: "babel-loader", // 设置babel options: { // 设置预定义的环境 presets: [ [ // 指定环境的插件 "@babel/preset-env", // 配置信息 { targets: { // 兼容的目标浏览器 "chrome": "88" }, // 指定corejs版本 "corejs": "3", // 使用corejs的方式 usage: 按需加载 "useBuiltIns": "usage" } ] ] } }, 'ts-loader' ], // 要排除的文件 exclude: /node_modules/ } ] }, mode: 'development', // 配置 webpack插件 plugins: [ new CleanWebpackPlugin(), new htmlWebpackPlugin( { // 'title': "宁轩个人博客" template: "./src/index.html" } ), ], // 用来设置引用模块 resolve: { extensions: ['.ts', '.js'] } } 复制代码
五、遇到的报错
module拼写错误
如图, 手敲快了 module敲成了moudle会报下图的错误
未指定环境
如图, 若未在package.json中指定当前环境, 则会报如下错误
六、总结
至此关于Webpack打包TypeScript文件就结束了, 有问题欢迎评论区留言讨论