最近闲来无事,想着详细了解一下webpack这个打包工具,于是乎就在哔站上找了下尚硅谷的课程,跟着去搞了一下,所写的这些文章也是自己学习的一些心得,与大家分享,如有不恰当的地方,欢迎大家及时指出,我定会加以改正。前端的更新迭代很快,希望大家要不断学习新的技术来武装自己。
首先我们是来介绍webpack的,那肯定是要先放上webpack的官网地址:webpack中文网
然后,我说了,我使用的尚硅谷教程,下面是课程链接地址:webpack5从入门到精通------webpack4教程
初始化包-package.json文件:npm init
安装webpack:npm i webpack webpack-cli
打包指令:webpack 入口文件路径 -o 出口文件路径 --mode=development/production
node环境运行:node 文件路径
// resolve用来拼接绝对路径的方法
const { resolve } = require("path");module.exports = {// 入口文件entry: './src/index.js',// 出口output: {// 输出文件名,这里要注意一定要带后缀// 入口文件的输出路径可以在这里进行配置:eg: "js/dist.js"filename: 'dist.js',// __dirname为nodejs的变量,代表当前文件的绝对路径// 这是所有文件的输出路径path: resolve(__dirname, 'build')},// loader配置module: {rules: [// 详细的loader配置]},// plugins配置plugins: [// 详细的plugins配置],// 模式mode: 'development'// mode: 'production'
}
// loader配置
module: {rules: [// 详细的loader配置{test: /\.css$/,use: [// use数组中loader执行顺序,从右到左,从上到下依次执行// 创建style标签,将js中的样式资源插入进来,添加到head中'style-loader',// 将css文件转换成一个commonjs模块,内容是样式字符串'css-loader']},{test: /\.less$/,use: ['style-loader','css-loader',// 将less文件转换成css文件'less-loader']}]
},
{test: /\.(jpeg|jpg|png|gif)$/,// 使用单个loaderloader: 'url-loader',options: {// 这个是用来关闭es6模块化解析esModule: false,/*** 图片大小小于8kb,就会被base64处理* 优点:减少请求数量(减轻服务器负担)* 缺点:图片体积会增大(文件请求速度更慢)*/limit: 8 * 1024,/*** 给图片进行重命名* [hash:10]:取图片的哈希值前十位 * [ext]:取文件原来的扩展名*/name: '[hash:10].[ext]'},type: 'javascript/auto'//这个属性如果没有设置,则会生成两张图片(如果你的页面只引入了一张图片)
},
{// 处理html的img标签引入的图片资源test: /.html$/,loader: 'html-loader'
}
{// 处理图片资源test: /\.(jpeg|jpg|png|gif)$/,type: 'asset',parser: {// 处理小图片,下面是指小于10kb的图片将被转换成base64的格式dataUrlcondition: {maxSize: 10 * 1024 // 10kb}},generator: {filename: "images/[hash:10][ext][query]"}
}
{// 处理其他资源// exclude是用来排除其他的文件资源exclude: /.(css|less|js|html|jpeg|jpg|png|gif)$/,loader: 'file-loader',options: {name: '[hash:10].[ext]'}
}
{// 处理其他资源test: /\.(ttf|woff2?|mp3|mp4)$/,type: 'asset/resource',generator: {filename: "midia/[hash:10][ext][query]"}
}
output: {// 输出文件名,这里要注意一定要带后缀filename: 'dist.js',// __dirname为nodejs的变量,代表当前文件的绝对路径path: resolve(__dirname, 'build'),// 自动清空上次打包内容clean: true}
plugins: [// 详细的plugins配置// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源// 需求:一个有结构的HTML文件new HtmlWebpackPlugin({// 复制'./src/index.html'文件,自动引入打包输出的所有资源(css/js)template: './src/index.html'})]
{test: /$\.js/,exclude: /node_modules/,loader: 'eslint-loader',options: {// 自动修复fix: true}
}
"eslintConfig": {"extends": "airbnb-base"
}
plugins: [// 我这是webpack5的写法,插件要引用new EslintWebpackPlugin({// 这里是因为我把resolve解构出来了context: resolve(__dirname, 'src'),fix: true})
],
"eslintConfig": {"extends": "airbnb-base"
}
module.exports = {// 解析选项parserOptions: {// js版本esmaVersion: 6,sourceType: "module"},env: {node: true, // 启用node全局变量browser: true // 启用浏览器中全局变量},// 具体检查规则,优先于我们继承的规则rules: {"no-var": 2},extends: "eslint:recommended"
}
// 与五大核心同级
devServer:{// 项目构建后的路径contentBase: resolve(__dirname, 'build'),// 启动gzip压缩compress: true,// 端口号port: 3000,// 自动打开浏览器open: true
}
// 与五大核心同级
devServer:{// 启动服务器域名host: localhost// 端口号port: 3000,// 自动打开浏览器open: true
}
创作不易
大家转载时劳烦注一下出处
雲墨·款哥,进阶的程序猿,永远在路上
下一篇:OpenCV和Cuda结合编程