使用webpack打包TS文件
安装依赖
- 安装webpack环境
npm i webpack webpack-cli webpack-dev-server -D
- 安装TypeScript
npm install typescript -D
- 编译TS
npm install ts-loader -D
- 热更新服务
npm install webpack-dev-server -D
- HTML模板
npm install html-webpack-plugin -D
{
"name": "webpackProject",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"dev": "webpack serve --open"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"html-webpack-plugin": "^5.5.0",
"ts-loader": "^9.3.1",
"typescript": "^4.7.4",
"webpack": "^5.73.0",
"webpack-cli": "^4.10.0",
"webpack-dev-server": "^4.9.3"
}
}
webpack配置文件
// webpack.config.js
const path = require("path")
const htmlWebpackPlugin = require("html-webpack-plugin")
module.exports = {
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, "dist"),
filename: "index.js"
},
module: {
rules: [
{test: /\.ts$/, use: 'ts-loader', exclude:/node_modules/}
]
},
mode: "development",
resolve: {
extensions: [".ts", ".js"]
},
plugins: [
new htmlWebpackPlugin({
template: "./public/index.html"
})
]
}
配置Babel
经过一系列的配置,使得 TS 和 webpack 已经结合到了一起,除了 webpack,开发中还经常需要结合 babel 来对代码进行转换以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将 babel 引入到项目中。
安装依赖包:
npm i -D @babel/core @babel/preset-env babel-loader core-js
- 共安装了 4 个包,分别是:
@babel/core
- babel 的核心工具
@babel/preset-env
- babel 的预定义环境
@babel-loader
- babel 在 webpack 中的加载器
core-js
- core-js 用来使老版本的浏览器支持新版 ES 语法
修改 webpack.config.js 配置文件
// ...other config... 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/ } ] } // ...other config...
- 如此一来,使用 ts 编译后的文件将会再次被 babel 处理,使得代码可以在大部分浏览器中直接使用,可以在配置选项的 targets 中指定要兼容的浏览器版本。
TS描述文件声明
TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaScript 库和模块信息的声明文件。通过引用这个声明文件,就可以借用 TypeScript 的各种特性来使用库文件了。
假如我们想使用第三方库,比如 jQuery
等等
声明文件以 .d.ts
为后缀 如:SayHello.d.ts
声明文件或模块的语法格式如下:declare module Module_Name { }
declare module "SayHello" {
export function sayHello(name: string): void;
}
很多流行的第三方库的声明文件不需要我们定义了