在自己喜欢的地方新建一个文件夹(需要先安装好node环境和npm,检查方式 node -v,npm -v,有版本号就是安装完成的)
1.2.1 安装webpack
//初始化npm initpackage name:webpack-project (名字)//其他都可以回车跳过//初始化完成后 文件夹下会有一个package.json文件

//安装wepback 和 webpack-clinpm 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=developmentwebpack会以 .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=developmentwebpack会以 .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,
},
},
}
