1、初始化项目:npm init -y 生成package.json文件;
2、安装构建工具:
2-1、webpack //构建工具;
2-2、webpack-cli //webpack命令行工具;
2-3、webpack-dev-server //webpack开发服务器;
2-4、typescript //ts编译器;
2-5、ts-loader //ts加载器、用于在webpack中编译ts文件;
2-6、html-webpack-plugin //webpakc中html插件,用于自动创建html文件;
2-7、clean-webpack-plugin //webpack中的清除插件,用于每一次构建时都清理打包目录下的文件。
安装方式:npm install -D webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin typescript ts-loader
3、根目录下创建: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 // 关闭代码压缩,可选
},
mode: "none",//'development' 、 'production'、'none'
entry: "./src/index.ts",
// devServer: {
// open: true,
// port: 8081,
// },
// devtool: "inline-source-map",
// performance :{
// maxEntrypointSize: 10000000,
// maxAssetSize: 30000000
// },
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js",
environment: {
arrowFunction: false // 关闭webpack的箭头函数,可选
}
},
resolve: {
//表示在import 文件时文件后缀名可以不写
extensions:['.js','.jsx','.json'],
//表示设置路径别名这样在import的文件在src下的时候可以直接 @/component/...
alias:{
'@':path.join(__dirname,'./src')
}
},
module: {
rules: [{
test: /\.ts$/,
use: {
loader: "ts-loader"
},
exclude: /node_modules/
}]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
title: 'TS测试'
}),
]
}
4、根目录下创建tsconfig.json,或者使用tsc -init
{
"compilerOptions": {
"target": "ES2015",
"module": "ES2015",
"strict": true
}
}
5. 修改package.json添加如下配置
{
...略...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"dev": "webpack-dev-server --open"
}
...略...
}
6、在 根目录下创建scr目录,并添加index.ts文件
运行:npm run build 打包 npm run dev 运行开发服务器
7、处理兼容问题:安装babel相关包
7-1:@babel/core // babel的核心工具
7-2:@babel/preset-evn //babel预设环境
7-3:babel-loader //babel在webpack中的加载器
7-4:core-js //用来把JS的新语法转成低版本的JS语法,兼容老版本的浏览器
安装:npm install -D @babel/core @babel/preset-env babel-loader core-js
8:修改webpack.config.js配置文件
完整的webpack配置如下:
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const {
CleanWebpackPlugin
} = require("clean-webpack-plugin");
module.exports = {
optimization: {
minimize: false // 关闭代码压缩,可选
},
mode: "none", //'development' 、 'production'、'none'
entry: "./src/index.ts",
// devServer: {
// open: true,
// port: 8081,
// },
// devtool: "inline-source-map",
// performance :{
// maxEntrypointSize: 10000000,
// maxAssetSize: 30000000
// },
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js",
environment: {
arrowFunction: false // 关闭webpack的箭头函数,可选
}
},
resolve: {
extensions: [".ts", ".js"]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
title: 'TS测试',
template: './src/index.html'
}),
],
module: {
rules: [{
test: /\.ts$/,
use: [
{
loader: "babel-loader",
options: {
presets: [
[
'@babel/preset-env',
{
targets: {
chrome: 88,
ie: 11
},
corejs: 3,
useBuiltIns: "usage" //按需加载
}
]
]
}
},
{
loader: "ts-loader"
}
],
exclude: /node_modules/
}]
}
}
9:npm run build
targets设置chrome 88的版本 经过babel处理
10:npm run build
targets设置ie 88的版本 经过babel处理