在自己喜欢的地方新建一个文件夹(需要先安装好node环境和npm,检查方式 node -v,npm -v,有版本号就是安装完成的)
1.2.1 安装webpack
//初始化
npm init
package name:webpack-project (名字)
//其他都可以回车跳过
//初始化完成后 文件夹下会有一个package.json文件
//安装wepback 和 webpack-cli
npm i webpack webpack-cli -g 全局安装
npm i webpack webpack-cli -D 开发环境安装
安装完成,项目文件夹下会多出一个node_moudules(依赖包) 和 package-lock.json(安装时的包的版本号)
1.2.2 认识环境配置
在根目录下新建一个src文件夹和build文件夹;
在src内新建index.js,在build文件夹内新建一个index.html;
/*
index.js webpack入口文件
1.运行指令:
开发环境:webpack --entry ./src/index.js -o ./build --mode=development
webpack会以 .src/index.js 为入口文件开始打包,打包后输出到./build/built.js,
整体打包环境为开发环境
生产环境:webpack --entry ./src/index.js -o ./build --mode=production
*/
function add(x,y){
return x + y
}
console.log(add(1,2));
运行开发环境的打包命令
打包成功 ——> build文件夹下内会多出一个main.js;
修改build文件夹内的index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 引入 -->
<script src="./main.js"></script>
</body>
</html>
在游览器打开后可以看到:
成功输出3,这就是最基础的打包;
1.2.3 样式资源打包
在src下创建一个style.css文件,然后在index.js中引入
style.css:
html,body{
background-color: red;
}
index.js:
/*
index.js webpack入口文件
1.运行指令:
开发环境:webpack --entry ./src/index.js -o ./build --mode=development
webpack会以 .src/index.js 为入口文件开始打包,打包后输出到./build,
整体打包环境为开发环境
生产环境:webpack --entry ./src/index.js -o ./build --mode=production
*/
// 引入样式文件
import './style.css';
function add(x,y){
return x + y
}
console.log(add(1,2));
运行打包命令后:
它会报如上错误,这是因为我们没有配置解析样式的相关配置,webpack无法识别样式代码;
即:默认情况下,webpack只能处理js和json文件;
配置webpack.config.js
在根目录创建一个webpack.config.js
/**
* webpack.config.js webpack的配置文件
* 作用:运行webpack时会加载其中的配置
* 默认common.js
*/
//webpack配置 -- 5个核心配置
const path = require('path'); //node.js的一个管理路径模块;
module.exports = {
//入口
entry: './src/index.js',
/**
* 输出
* filename:打包后的文件名,
* path:打包文件名
*/
output:{
filename:'bundle.js',
//path.resolve();用来拼接绝对路径
//__dirname node.js的一个变量,代表wepback.config.js所在目录绝对路径
path:path.resolve(__dirname, 'dist')
},
//loader的配置
module:{
rules:[//详细的loader配置
]
},
// plugins的配置
plugins:[],
//当前环境模式
mode:'development'
}
配置loader
module:{
rules:[//详细的loader配置
{
// 匹配文件
test:/\.css$/,
//user:使用哪些loader,执行顺序从右到左,从下到上
//style-loader:创建style标签,将js中的样式资源插入,添加到head中生效
//css-loader:将css文件变成commonjs模块加载到js中,里面的内容是样式字符串;
use:['syle-loader','css-loader']
}
]
},
安装对应的loader
npm i style-loader css-loader -D
运行打包命令wepback; //webpack 默认打包命令 等于 webpack build
可以看到打包成功,然后在dist文件夹内新建一个index.html文件,引入bundle.js文件;
样式文件引入成功;
其他一些loader可以查询wepback官网 :地址
1.2.4 html资源打包
首先需要下载一个插件 html-webpack-plugin
npm i html-webpack-plugin -D
配置plugins
在根目录新建一个public文件夹,创建一个index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
配置webpack.config.js
output: {
filename: 'bundle.[hash].js',
//path.resolve();用来拼接绝对路径
//__dirname node.js的一个变量,代表wepback.config.js所在目录绝对路径
path: path.resolve(__dirname, 'dist')
},
// plugins的配置
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
filename: 'index.html',
hash: true, //true则将唯一的webpack编译哈希值附加到所有包含的脚本和CSS文件中。主要用于清除缓存,同时需要将output中的filename设置成bundle.[hash].js
})
],
删除dist文件夹,运行打包命令:webpack;
打包成功,会自动生成dist文件,以及插入打包后的js文件;
1.2.5 打包图片资源
安装依赖包
npm i file-loader url-loader html-loader -D
配置loader
module: {
rules: [ //详细的loader配置
{
// 匹配文件
test: /\.css$/,
//user:使用哪些loader,执行顺序从右到左,从下到上
//style-loader:创建style标签,将js中的样式资源插入,添加到head中生效
//css-loader:将css文件变成commonjs模块加载到js中,里面的内容是样式字符串;
use: ['style-loader', 'css-loader']
},
//处理图片资源
{
test:/\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
esModule: false,
limit: 8 * 1024,
//[hash:10] hash前10位,[ext] 原来的扩展名
name:'[hash:10].[ext]',
//outputPath 打包后存放的路径
outputPath:'static'
}
},
//处理html中的img文件
{
test: /\.html$/,
loader:'html-loader',
options: {
esModule: false
}
}
]
},
1.2.6 打包其他资源
配置loader
//打包其他资源
{
//exclude 为排除,排除上面配置过的
exclude:/\.(css|js|html|png|jpe?g|gif|svg)(\?.*)?$/,
loader:'file-loader,
options: {
name:'[hash:10].[ext]'
}
}
1.2.7 配置开发服务器(devServer)
自动化编译,热更新
安装开发服务器依赖:npm i webpack-dev-server -D
var path = require('path');
module.exports = {
//...
devServer:{
//运行代码目录
contentBase: path.join(__dirname, 'dist'),
//文件更改将触发整个页面重新加载
watchContentBase: true,
//启动压缩
compress: true,
//端口号
port: 9000,
//域名
// host:'0.0.0.0',
//热更新
hot: true,
//服务器启动后打开浏览器
open:true,
}
};
运行指令:webpack serve;
配置代理 (devServer.proxy)
devServer:{
//运行代码目录
contentBase: path.join(__dirname, 'dist'),
//文件更改将触发整个页面重新加载
watchContentBase: true,
//启动压缩
compress: true,
//端口号
port: 9000,
//域名
// host:'0.0.0.0',
//热更新
hot: true,
//服务器启动后打开浏览器
open:true,
// 代理
proxy: {
'/api': {
target: 'http://localhost:3000',//例如 api/users 的请求会将请求代理到http://localhost:3000/api/users
pathRewrite: { '^/api': '' },//api/users 的请求会将请求代理到 http://localhost:3000/users
//默认情况下,将不接受在 HTTPS 上运行且证书无效的后端服务器,如果需要,可以这样修改配置:
secure: false,
//默认情况下,代理时会保留主机头的来源,可以将 changeOrigin 设置为 true 以覆盖此行为。
changeOrigin: true,
},
},
}