1.初始化项目
使用 tsc --init 初始化项目,生成tsconfig.json 文件
使用npm init -y
在项目中生成一个package.json文件,用来管理项目
npm init -y
创建src/index.ts文件,用来编写ts代码
2.安装依赖 【下载构建工具】
安装使用webpack所需要的依赖 cnpm i -D
D 表示的是开发依赖
安装包webpack
——打包工具的核心代码
webpack -cil
——webpack 命令行工具,通过命令行使用webpack
typescript
—— ts的核心包
ts-loader
——loader webpack加载器
,通过ts-loader
可以把webpack和typescript进行整合,变成一体的
npm i -D webpack-cli typescript ts-loader webpack
这里主要安装了4个依赖
一共安装了七个包:
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中的清除插件,每次构建都会先清除目录
3.编写webpack的配置文件 webpack.config.js 【在根目录下进行配置】
// 引入一个包 实际上就是一个node.js里面的一个模块,主要是用来拼接路径的
const path = require('path');
// webpack 中所有的配置信息都应该卸载module.exports中
module.exports = {
// entry: 指定入口文件
entry: "./src/index.ts",
// 入口文件指定完成之后对文件进行打包,把文件输出到指定的位置 【指定打包文件所在的目录】
output: {
// 指定打包文件的目录 __dirname,是一个成员,用来动态获取当前文件模块所属的绝对路径
// 所以说path:path.resolve(__dirname,"dist")就是在打包之后的文件夹上拼接了一个文件夹,在打包时,直接生成。
path: path.resolve(__dirname, 'dist'),
// 打包后文件的文件名
filename: "bundle.js"
},
// 指定webpack打包时要使用的模块
module: {
// 指定要加载的规则
rules: [
// 用ts-loader 处理以ts结尾的文件
{
// test 指定的是规则生效的文件
test: /\.ts$/, // 表示去【匹配所有以ts结尾的文件
// t要使用的loader
use: 'ts-loader',
// 要排除的文件
exclude: /node-modules/
}
]
}
}
4.编写tsconfig.json的配置文件
注: 使用
tsc --init
可以直接创建配置tsconfig.json 文件
或者使用下面的 【统一使用ES6】
{
"compilerOptions": {
"module" : "ES2015",
"target":"ES2015",
"strict" : true
}
}
5.在package.json 里面加一个命令
通过build 命令直接执行webpack 进行打包
"build":"webpack"
最后就是这样的
{
"name": "learn_typescript",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build":"webpack"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"ts-loader": "^9.4.4",
"typescript": "^5.1.6",
"webpack": "^5.88.1",
"webpack-cli ": "^5.1.4"
}
}
这样子之后就可以使用 `npm run build` 进行打包
注:在我运行的时候出现了 错误
ERROR in main
Module not found: Error: Can't resolve './src/index.js ' in 'E:\learn_typescript'
resolve './src/index.js ' in 'E:\learn_typescript'
using description file: E:\learn_typescript\package.json (relative path: .)
Field 'browser' doesn't contain a valid alias configuration
using description file: E:\learn_typescript\package.json (relative path: ./src/index.js )
no extension
Field 'browser' doesn't contain a valid alias configuration
E:\learn_typescript\src\index.js doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
E:\learn_typescript\src\index.js .js doesn't exist
.json
Field 'browser' doesn't contain a valid alias configuration
E:\learn_typescript\src\index.js .json doesn't exist
.wasm
Field 'browser' doesn't contain a valid alias configuration
E:\learn_typescript\src\index.js .wasm doesn't exist
as directory
E:\learn_typescript\src\index.js doesn't exist
webpack 5.88.1 compiled with 1 error in 70 ms
之后发现是 webpack.config.js 里面的 entry入口文件配置错误了
entry: "./code/part03/src/index.ts",
后,面根据自己的路径配置为了上面的路径就可以了
如果你们在运行的时候也发生上面的问题,就看一下入口文件的路径就可以了
6. 使用 npm run build 对项目进行打包,当出现dist 时就说明打包成功了
在src/index.ts 编写代码之后使用npm run bulid 进行打包之后,运行成功,最终效果如上
ts文件进行打包构建之后已经成功转换成为js文件了,但是因为文件最终还是·要放到网页里面进行运行,所以需要创建一个html 文件
创建html文件的方式
① 在src目录下直接创建, 【比较麻烦,需要纯手动的创建和引入文件】
②html文件是 webpack 给我们自动创建的,创建完成之后项目根据实际情况进行引入
这里需要引入一个插件 【帮助我们自动的生成html 文件】
npm i -D html-webpack-plugin
安装完成插件之后在webpack.config.js 里面,引入了html 和配置webpack插件 【可自己进行对比】
// 引入一个包 实际上就是一个node.js里面的一个模块,主要是用来拼接路径的
const path = require('path');
// 引入html 插件
const HTMLWebpackPlugin = require('html-webpack-plugin');
// webpack 中所有的配置信息都应该卸载module.exports中
module.exports = {
// entry: 指定入口文件
// entry: "./src/index.ts",
entry: "./src/index.ts",
// 入口文件指定完成之后对文件进行打包,把文件输出到指定的位置 【指定打包文件所在的目录】
output: {
// 指定打包文件的目录 __dirname,是一个成员,用来动态获取当前文件模块所属的绝对路径
// 所以说path:path.resolve(__dirname,"dist")就是在打包之后的文件夹上拼接了一个文件夹,在打包时,直接生成。
path: path.resolve(__dirname, 'dist'),
// 打包后文件的文件名
filename: "bundle.js"
},
// 指定webpack打包时要使用的模块
module: {
// 指定要加载的规则
rules: [
// 用ts-loader 处理以ts结尾的文件
{
// test 指定的是规则生效的文件
test: /\.ts$/, // 表示去【匹配所有以ts结尾的文件
// t要使用的loader
use: 'ts-loader',
// 要排除的文件
exclude: /node-modules/
}
]
},
// 配置webpack插件 作用:自动生成html文件并且引入相关的资源
plugins:[
new HTMLWebpackPlugin({
// title:"这是一个自定义的title"
template:"./src/index.html"
}),
]
}
之后在使用 npm run bulid 就会发现在dist文件夹下面生成了一个 html 文件
注意:使用webpack 插件的时候可以自定义插件的标题或者在其他目录下面生成一个模板,直接进行引用,如上面就是使用
template:"./src/index.html" 进行引用的模板 【引用的是src目录下的index】
这里为了更方便的使用,我们可以安装一个插件【webpack 开发服务器】,让服务器和项目有关联,当项目改变之后,服务器也会改变
npm i -D webpack-dev-server // 这样可以根据项目的改变自动刷新
插件安装完成之后,需要在package.json 里面添加一个命令
"start":"webpack serve --open chrome.exe"
之后执行
npm start // 运行项目
第一次运行的时候,发现出现了警告
添加mode之后就可以解决了
注:小提示
插件的安装:npm i -D clean-webpack-plugin // 作用清除dist目录
插件下载之后,要在webpack.config.js 引入插件
const {CleanWebpackPlugin}=require('clean-webpack-plugin');
之后在plugins:[] 数组里面进行注册
new CleanWebpackPlugin(),
之后 npm run build 执行
为了让ts文件可以作为模块被引用和使用,我们需要做一个配置告诉webpack那些文件可以被引用和使用
在webpack.config.js 里面写一个
// 用来设置引用模块
resolve:{
extensions:['.ts','.js']
}
重点是告诉它以ts,js结尾的文件都可以作用 模块使用