# webpack 安装
安装webpack和本地安装
// 此文件夹安装
npm i -D webpack webpack-cli
查看安装版本
webpack -v
webpack --version
# webpack 使用
在目录下创建一个固定名称的文件 webpack.config.js
,此文件用于添加 webpack 打包的相关配置
把使用 ES6 写法的 js 文件打包成 ES5 格式通用版本。存放在 dist 文件夹下
# JS 打包
module.exports = {
// mode 模式,可选值:
// production 产品 删除了空格和注释,缩小文件大小
// development 开发 带有空格和注释,便于阅读
mode: "production",
// entry 入口,代表你要打包的 js 文件路径
entry: "./src/js/index.js",
// output 出口,规定打包之后的文件存放在哪里
output: {
// filename 文件名
filename: "bundle.js",
// path 文件存放的路径
// __dirname 是 node.js 提供的一个属性,代表文件所在的目录,绝对路径
path: __dirname + "/dist"
}
}
- 通过 cmd,按照 webpack.config.js 文件中的配置,进行自动打包操作
- 切换到当前文件下
npx webpack
- 执行完毕后,到 dist 文件夹下查看是否多出来一个 bundle.js 文件
- 使用
npx webpack
即可实现打包,打包之后的 js 文件在 dist 文件夹下
# CSS打包
- 下载安装依赖
npm i -D css-loader style-loader
- 下载完毕再次运行打包目录
module.exports = {
mode: "development",
entry: "./src/js/index.js",
output: {
filename: "bundle.js",
path: __dirname + "/dist"
},
// webpack 本事只能对 js 文件进行打包,对其它类型文件打包时,必须进行特殊设置
module: {
// rules 规则,规范
rules: [
{
// 注意是 test 不是 test!!
// 监听 .css 结尾的文件
test: /\.css$/,
// 下载安装依赖工具才可以,此处css两个依赖工具 style-loader css-loader
use: ['style-loader', 'css-loader']
}
]
}
}
在 index.js 文件中引入 css
import style from './../css/index.css'
# 图片打包
安装依赖
npm i -D file-loader url-loader
file-loader:作用是只把用到图片拷贝到 dist 目录下,过滤掉不用的图片,减小项目体积
url-loader:可以把小于指定大小的图片使用 base64 进行转码,把图片转换为字符串存储,把超过指定图片大小,依然采用file-loader方式处理
即url-loader是file-loader的升级版本
module.exports = {
mode: "development",
entry: "./src/js/index.js",
output: {
filename: "bundle.js",
path: __dirname + "/dist"
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
loader: 'file-loader', // file-loader 或 url-loader
// 默认图片出现在dist下方并为了防止重名会改名称,可以通过配置来导出指定文件夹下,维持原有名称
options: {
// [name] 代表原图片名称
// [ext] 代表图片原后缀名
name: 'img/[name].[ext]',
// 限制大小 8192B -> 8KB
// 即 8KB 分割线,小于的转 base64 存储,大于的依然是拷贝方式
limit: 8192
}
}
]
}
}
# 打包html
打包时,需要把html文件复制到dist文件夹下,并且手动修改文件中的各种相对路径,才能让html文文件可以用,这个操作如果每次都需要手动进行,会非常复杂麻烦
安装插件
npm i -D html-webpack-plugin
// 引入模块 Node.js 写法
const htmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: "development",
entry: "./src/js/index.js",
output: {
filename: "bundle.js",
path: __dirname + "/dist"
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
loader: 'file-loader',
options: {
name: 'img/[name].[ext]',
limit: 8192
}
}
]
},
// 设定要加载的插件
plugins: [
new htmlWebpackPlugin({
// 指定要操作的html文件
template: './index.html'
})
]
}
会自动拷贝index.html到dist目录下,并引入js代码
# 自动化 live servre
TIP
自动监听文件的修改,并且如果有修改就会自动打包并且还会自动刷新页面(与live server一样)
安装插件
npm i -D webpack-dev-server 与vscode的live server 一样
修改新的配置文件 package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
// --open 代表打开默认的浏览器
"dev": "webpack-dev-server --open"
},
新的打包命令:npm run dev
,浏览器会自动弹出,然后修改代码会实时刷新
# webpack 打包
改代码必须放在 webpack.config.js 中
// 打包 js 和 压缩
const path = require('path');
/* eslint-disable no-undef */
const path = require('path');
const webpack = require('webpack');
const GitRevisionPlugin = require('git-revision-webpack-plugin');
const gitRevisionPlugin = new GitRevisionPlugin();
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
// production
mode: 'development',
bail: true,
devtool: 'source-map',
entry: {
'sitio': './src/index.js'
},
output: {
path: path.resolve(__dirname, 'source', 'js'),
filename: '[name].min.js',
publicPath: '/'
},
resolve: {
modules: ['node_modules'],
extensions: ['.js']
},
module: {
strictExportPresence: true,
rules: [
{
test: /\.js$/,
use: [
{
loader: require.resolve('babel-loader'),
options: {
compact: true,
presets: ['@babel/preset-env']
}
}
]
}
]
},
// plugins: [
// new BundleAnalyzerPlugin({
// logLevel: 'warn',
// reportFilename: 'video-report.html',
// analyzerMode: 'static',
// openAnalyzer: false,
// }),
// ],
node: {
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
}
};