第一步、安装nodejs;
第二步、创建项目文件夹,在该项目下执行npm init
命令;
第三步、执行npm i -D webpack webpack-cli typescript ts-loader
命令,导入项目所需依赖;
第四步、在根目录下创建webpack.config.js
文件,引入webpack相关配置,在package.json
文件中加入脚本"build": "webpack"
;
const path = require('path');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node-modules/
}
]
}
}
第五步、在根目录下创建tsconfig.json
文件,写入tsconfig相关配置;
{
"compilerOptions": {
"module": "ES2015",
"target": "ES2015",
"strict": true,
}
}
第六步、在根目录下创建src文件夹,存放项目全部资源;
第七步、执行npm i -D html-webpack-plugin
,引入html-webpack-plugin
插件来创建HTML入口文件,接着在webpack.config.js
文件中引入该插件;
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node-modules/
}
]
},
plugins: [
new HTMLWebpackPlugin({
title: "自定义HTML文件的Title"
}),
],
}
第八步、执行npm i -D webpack-dev-server
,引入webpack-dev-server
插件来帮助项目热启动,在package.json
文件中加入脚本"start": "webpack serve --open chrome.exe"
;
第九步、执行npm i -D clean-webpack-plugin
,引入clean-webpack-plugin
插件来帮助项目每次执行webpack打包前先清空打包输出文件夹dist
,接着在webpack.config.js
中引用该插件;
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node-modules/
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HTMLWebpackPlugin({
title: "自定义HTML文件的Title"
}),
],
}
第十步、在webpack.config.js
文件中解决在打包时找不到js和ts模块文件;
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node-modules/
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HTMLWebpackPlugin({
title: "自定义HTML文件的Title"
}),
],
resolve: {
extensions: ['.ts', '.js'],
}
}
第十一步,执行npm i -D @babel/core @babel/preset-env babel-loader core-js
,安装babel
所需的依赖,并在webpack.config.js
文件中配置babel
和corejs
;
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "100",
"ie": "11",
},
"corejs": "3",
"useBuiltIns": "usage",
}
]
]
}
},
'ts-loader'
],
exclude: /node-modules/
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HTMLWebpackPlugin({
title: "自定义HTML文件的Title"
}),
],
resolve: {
extensions: ['.ts', '.js'],
}
}
第十二步,在webpack.config.js文件中配置,使webpack在打包时不使用箭头函数(兼容IE)。
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js",
environment: {
arrowFunction: false,
}
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "100",
"ie": "11",
},
"corejs": "3",
"useBuiltIns": "usage",
}
]
]
}
},
'ts-loader'
],
exclude: /node-modules/
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HTMLWebpackPlugin({
title: "自定义HTML文件的Title"
}),
],
resolve: {
extensions: ['.ts', '.js'],
}
}