| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> JavaScript知识库 -> webpack学习记 -> 正文阅读 |
|
|
[JavaScript知识库]webpack学习记 |
|
webpack官网 webpack 安装nodejs如何安装自己看官网教程,webpack依赖于nodejs 初始化文件创建文件夹 eg:webpack_sudy 打开终端 npm init -y 创建源文件src在webpack_study文件下 建立src文件夹 src文件夹下创建index.js入口文件,自己输入点内容index.js 打包js文件输入webpack 或 webpack 打包文件 -o 输出文件 --mode=development eg(webpack ./src/index.js -o ./build/main.js –mode=development) 建立一个html文件,引入打包文件js即可看到是否打包成功 创建打包配置文件webpack.config.jsconst path = require('path');
module.exports = {
? ?// 输入
? ?entry: './src/index.js',
? ?// 输出
? ?output: {
? ? ? ?filename: 'main.js',
? ? ? ?path: path.resolve(__dirname, 'build')
? },
? ?// loader配置
? ?module: {
?
? },
? ?plugins: [
? ? ?
? ],
? ?mode: 'development',
}
基本属性结构如上,根据配置再补充 打包css文件webpack不能打包css文件,需要解除loader 配置如下,即在上面module:{}里面配置 ?// loader配置
? ?module: {
? ? ? ?rules: [
? ? ? ? ? ?// 打包css文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.css$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ? ? ?//打包less文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.less$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader',
? ? ? ? ? ? ? ? ? ?'less-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ]
?
? },
在js里面import ‘css文件’ 建立一个html文件,引入打包文件js即可看到是否打包成功 打包html文件需要借助插件html-webpack-plugin 安装html-webpack-plugin安装命令 -D为本地安装 npm install html-webpack-plugin -D webpack.config.js配置//开头引入
const HtmlWebpackPlugin = require('html-webpack-plugin');
?
//之后在里面plugins属性里面配置
plugins: [
? ? ? ?// 使用插件html-webpack-plugin打包html文件
? ? ? ?// new HtmlWebpackPlugin()打包多一个index.html文件
? ? ? ?new HtmlWebpackPlugin({
? ? ? ? ? ?// 复制入门文件index.html结构样式
? ? ? ? ? ?template: './src/index.html'
? ? ? })
? ],
打包运行命令 webpack 即可看到打包文件中多了一个index.html 打包图片文件气死了气死了气死了,卡了好久好久不能正常显示,原来是版本太高的问题,呕血!!!!! 注意:推荐使用版本较低的,比如以下版本,于是实在出问题摸不着头脑的时候便按照以下图片修改了版本 重新安装版本 npm i css-loader@5.2.4 -D npm i style-loader@2.0.0 -D
css中的图片背景( 使用url-loader,url-loader依靠file-loader) 下载安装 npm i url-loader file-loader -D 在module里面配置rules:[{}] ?// 打包css中url图片文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.(jpg|png|gif)$/i,
?// url-loader依靠file-loader所以需要下载两个
? ? ? ? ? ? ? ?loader: 'url-loader',
? ? ? ? ? ? ? ?options: {
// 设置图片小于6*1024,就会被base64处理图片,减少请求数量
? ? ? ? ? ? ? ? ? ?limit: 6 * 1024,
?// 关闭url-loader的es6模块化,不然html里面img元素会有问题
? ? ? ? ? ? ? ? ? ?esModule: false,
? ? ? ? ? ? ? ? ? ?// [ext]取原来扩展名 名字长度取10
? ? ? ? ? ? ? ? ? ?name: '[name].[hash:10].[ext]',
? ? ? ? ? ? ? ? ? ?// 超过大小file-loader打包
? ? ? ? ? ? ? ? ? ?fallback: 'file-loader',
? ? ? ? ? ? ? ? ? ?outputPath: 'images/',
? ? ? ? ? ? ? }
? ? ? ? ? },
html里面的img使用html-loader(加配置,可能会出错)或 html-withimg-loader 安装 npm i html-loader -D 或 npm i html-withimg-loader -D 在module里面配置rules:[{}] 用html-loader配置 ? ? ? ? ? // 打包html文件img问题
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.html$/,
? ? ? ? ? ? ? ?loader: 'html-loader',
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?esModule: false
? ? ? ? ? ? ? }
? ? ? ? ? }
用html-withimg-loader(推荐这个) ? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.html$/,
? ? ? ? ? ? ? ?loader: 'html-withimg-loader'
?
? ? ? ? ? }
打包其他资源(其他资源:不需要做任何处理,原封不动输出出去就可以) 打包字体图标示例这里使用iconfont阿里云矢量图标库 下载解压引入iconfont.css 在入口文件 index.js 设置 import ‘’iconfont.css路径“ 看到iconfont.css中需要几个文件一同引入过来 (utl根据实际情况更改)
引入目录为(有些还需要svg,看iconfont.css需要什么)
于是在index.html配置引用 (本人在这里傻逼了,class没写,一直还以为哪里出错) <!DOCTYPE html> <html lang="en"> ? <head> ? ?<meta charset="UTF-8"> ? ?<meta http-equiv="X-UA-Compatible" content="IE=edge"> ? ?<meta name="viewport" content="width=device-width, initial-scale=1.0"> ? ?<title>webpack打包文件</title> </head> ? <body> ? ?<div>webpack打包</div> ? ?<h2>其他资源打包</h2> ? ?<span class="iconfont icon-shezhi"></span> ? ?<span class="iconfont icon-dingdan"></span> ? ?<span class="iconfont icon-shangpin"></span> ? ?<span class="iconfont icon-yonghuqun"></span> ? ?<span class="iconfont icon-quanxian"></span> </body> ? </html> webpack.config.js module中rules:[{}]配置为 ?// 打包其他资源
{
? exclude: /\.(css|less|js|html|jpg|png|gif)$/,
? loader: 'file-loader',
? ?options: {
? ?//输出文件夹
? ?outputPath: 'others'
? ? ? ? ? ? }
}
打包运行命令webpack 打包成功 devServer帮助自动打包,修改代码后,不需要每次webpack打包
以上打包完整代码const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
?
module.exports = {
? ?// 输入
? ?entry: './src/index.js',
? ?// 输出
? ?output: {
? ? ? ?// 输出目录
? ? ? ?path: path.resolve(__dirname, 'dist'),
? ? ? ?filename: 'bundle.js',
? },
? ?// loader配置
? ?module: {
? ? ? ?rules: [
? ? ? ? ? ?// 打包css文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.css$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ? ? ?//打包less文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.less$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader',
? ? ? ? ? ? ? ? ? ?'less-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ? ? ?// 打包css中url图片文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.(jpg|png|gif|svg)$/i,
? ? ? ? ? ? ? ?// url-loader依靠file-loader所以需要下载两个
? ? ? ? ? ? ? ?loader: 'url-loader',
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?// 设置图片小于6*1024,就会被base64处理图片,减少请求数量
? ? ? ? ? ? ? ? ? ?limit: 6 * 1024,
? ? ? ? ? ? ? ? ? ?// 关闭url-loader的es6模块化,不然html里面img元素会有问题
? ? ? ? ? ? ? ? ? ?esModule: false,
? ? ? ? ? ? ? ? ? ?// [ext]取原来扩展名 名字长度取10
? ? ? ? ? ? ? ? ? ?name: '[name].[hash:10].[ext]',
? ? ? ? ? ? ? ? ? ?// 输出文件夹
? ? ? ? ? ? ? ? ? ?outputPath: 'images',
? ? ? ? ? ? ? }
? ? ? ? ? },
?
? ? ? ? ? ?// 打包html文件img问题
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.(htm|html)$/,
? ? ? ? ? ? ? ?loader: 'html-withimg-loader'
? ? ? ? ? },
? ? ? ? ? ?// 打包其他资源
? ? ? ? ? {
? ? ? ? ? ? ? ?exclude: /\.(css|less|js|html|jpg|png|gif)$/,
? ? ? ? ? ? ? ?loader: 'file-loader',
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?//输出文件夹
? ? ? ? ? ? ? ? ? ?outputPath: 'others'
?
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ]
?
? },
? ?plugins: [
? ? ? ?// 使用插件html-webpack-plugin打包html文件
? ? ? ?// new HtmlWebpackPlugin()打包多一个index.html文件
? ? ? ?new HtmlWebpackPlugin({
? ? ? ? ? ?// 复制入门文件index.html结构样式
? ? ? ? ? ?template: './src/index.html'
? ? ? })
? ],
? ?mode: 'development',
? ?// 开发服务器devServer 用来自动化
? ?// 特点:只会在内存中编译打包,不会有任何输出
? ?// 启动命令为 npx webpack-dev-server
? ?devServer: {
? ? ? ?// contentBase: path.resolve(__dirname, 'dist'),//官方文档已经说被弃用
? ? ? ?//可写可不写
? ? ? ?static: {
? ? ? ? ? ?directory: path.join(__dirname, 'dist'),
? ? ? },
? ? ? ?// 启动gzip压缩
? ? ? ?compress: true,
? ? ? ?// 启动端口号
? ? ? ?port: 3001,
? ? ? ?//自动打开浏览器
? ? ? ?open: true,
? }
}
多文件配置这里以index.html和login.html为例子
// 多文件配置多个入口
? ?entry: {
? ? ? ?index: './src/index.js',
? ? ? ?login: './src/login.js'
? },
output: {
? ? ? ?// 多文件输出
? ? ? ?path: path.resolve(__dirname, 'dist'),
? ? ? ?filename: 'js/[name].js',
? },
?
babel配置babel:将高版本的js语法转换为低版本浏览器能识别的语法
sourceMap源码映射源码的映射,通过sourceMap打包找到真正源码的位置
问题:点击上图右侧,并不是真正index.js映射的源码位置 面试官问map文件是什么?就是sourceMap源码映射 详情官网 Devtool | webpack
配置如下:(开发模式下建立用3不生成map文件且为源码) devtool:'eval-cheap-module-source-map' 使用第三方插件全局使用第三方插件 比如jquery $ 下载第三方插件 npm i jquery -S 配置webpack自带插件 const webpack = require('webpack');
?
//plugins里面配置
plugins:[
? ?// 第三方库jquery挂载使用
? ? ? ?new webpack.ProvidePlugin({
? ? ? ? ? ?$: 'jquery',
? ? ? ? ? ?jQuery: 'jquery'
? ? ? })
]
在js文件直接使用即可实现 webpack区分生产环境和开发分包
webpack处理跨域问题
协议 域名 端口号 三个有一个不一样便出现跨域
模拟后台编写简单接口
webpack.config.js跨域配置代码如下是两个页面index.html和login.html均配置实现了跨域 const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
?
module.exports = {
? ?// 输入
? ?// entry: './src/index.js',
? ?// 多文件配置多个入口
? ?entry: {
? ? ? ?index: './src/index.js',
? ? ? ?login: './src/login.js'
? },
? ?// 输出
? ?output: {
? ? ? ?// 输出目录
? ? ? ?// path: path.resolve(__dirname, 'dist'),
? ? ? ?// filename: 'bundle.js',
? ? ? ?// 多文件输出
? ? ? ?path: path.resolve(__dirname, 'dist'),
? ? ? ?filename: 'js/[name].js',
? },
? ?// loader配置
? ?module: {
? ? ? ?rules: [
? ? ? ? ? ?// 打包css文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.css$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ? ? ?//打包less文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.less$/,
? ? ? ? ? ? ? ?use: [
? ? ? ? ? ? ? ? ? ?'style-loader',
? ? ? ? ? ? ? ? ? ?'css-loader',
? ? ? ? ? ? ? ? ? ?'less-loader'
? ? ? ? ? ? ? ]
? ? ? ? ? },
? ? ? ? ? ?// 打包css中url图片文件
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.(jpg|png|gif|svg)$/i,
? ? ? ? ? ? ? ?// url-loader依靠file-loader所以需要下载两个
? ? ? ? ? ? ? ?loader: 'url-loader',
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?// 设置图片小于6*1024,就会被base64处理图片,减少请求数量
? ? ? ? ? ? ? ? ? ?limit: 6 * 1024,
? ? ? ? ? ? ? ? ? ?// 关闭url-loader的es6模块化,不然html里面img元素会有问题
? ? ? ? ? ? ? ? ? ?esModule: false,
? ? ? ? ? ? ? ? ? ?// [ext]取原来扩展名 名字长度取10
? ? ? ? ? ? ? ? ? ?name: '[name].[hash:10].[ext]',
? ? ? ? ? ? ? ? ? ?// 输出文件夹
? ? ? ? ? ? ? ? ? ?outputPath: 'images',
? ? ? ? ? ? ? }
? ? ? ? ? },
?
? ? ? ? ? ?// 打包html文件img问题
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /\.(htm|html)$/,
? ? ? ? ? ? ? ?loader: 'html-withimg-loader'
? ? ? ? ? },
? ? ? ? ? ?// 打包其他资源
? ? ? ? ? {
? ? ? ? ? ? ? ?exclude: /\.(css|less|js|html|jpg|png|gif)$/,
? ? ? ? ? ? ? ?loader: 'file-loader',
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?//输出文件夹
? ? ? ? ? ? ? ? ? ?outputPath: 'others'
? ? ? ? ? ? ? }
? ? ? ? ? },
? ? ? ? ? ?// babel转换
? ? ? ? ? {
? ? ? ? ? ? ? ?test: /.\js$/,
? ? ? ? ? ? ? ?loader: 'babel-loader',
? ? ? ? ? ? ? ?exclude: /node_modules/,
? ? ? ? ? ? ? ?options: {
? ? ? ? ? ? ? ? ? ?presets: ['@babel/env']
? ? ? ? ? ? ? }
? ? ? ? ? },
? ? ? ]
?
? },
? ?//插件
? ?plugins: [
? ? ? ?// 使用插件html-webpack-plugin打包html文件
? ? ? ?// new HtmlWebpackPlugin()打包多一个index.html文件
? ? ? ?new HtmlWebpackPlugin({
? ? ? ? ? ?// 复制入门文件index.html结构样式
? ? ? ? ? ?template: './src/index.html',
? ? ? ? ? ?filename: 'index.html',
? ? ? ? ? ?chunks: ['index']
? ? ? }),
? ? ? ?// 多文件
? ? ? ?new HtmlWebpackPlugin({
? ? ? ? ? ?// 复制入门文件login.html结构样式
? ? ? ? ? ?template: './src/login.html',
? ? ? ? ? ?filename: 'login.html',
? ? ? ? ? ?chunks: ['login']
? ? ? }),
? ? ? ?// 第三方库jquery挂载使用
? ? ? ?new webpack.ProvidePlugin({
? ? ? ? ? ?$: 'jquery',
? ? ? ? ? ?jQuery: 'jquery'
? ? ? })
? ],
? ?mode: 'development',
? ?// 开发服务器devServer 用来自动化
? ?// 特点:只会在内存中编译打包,不会有任何输出
? ?// 启动命令为 npx webpack-dev-server
? ?devServer: {
? ? ? ?// contentBase: path.resolve(__dirname, 'dist'),//官方文档已经说被弃用
? ? ? ?// 启动gzip压缩
? ? ? ?compress: true,
? ? ? ?// 启动端口号
? ? ? ?port: 3001,
? ? ? ?//自动打开浏览器
? ? ? ?open: true,
? ? ? ?proxy: {
? ? ? ? ? ?"/api": "http://localhost:666"
? ? ? }
? },
? ?devtool: 'eval-cheap-module-source-map',
}
webpack CSS处理css文件分离使用插件mini-css-extract-plugin
css css3语法兼容处理
css压缩
js和html压缩js压缩mode:production ? //生产模式就压缩了js代码 html压缩在插件中添加minify ?new HtmlWebpackPlugin({
? ? ? ? ? ?// 复制入门文件index.html结构样式
? ? ? ? ? ?template: './src/index.html',
? ? ? ? ? ?filename: 'index.html',
? ? ? ? ? ?chunks: ['index'],
? ? ? ? ? ?// html压缩
? ? ? ? ? ?minify: {
? ? ? ? ? ? ? ?// 移除空格
? ? ? ? ? ? ? ?collapseWhitespace: true,
? ? ? ? ? ? ? ?// 移除注释
? ? ? ? ? ? ? ?removeComments: true
? ? ? ? ? }
? ? ? }),
|
|
|
| JavaScript知识库 最新文章 |
| ES6的相关知识点 |
| react 函数式组件 & react其他一些总结 |
| Vue基础超详细 |
| 前端JS也可以连点成线(Vue中运用 AntVG6) |
| Vue事件处理的基本使用 |
| Vue后台项目的记录 (一) |
| 前后端分离vue跨域,devServer配置proxy代理 |
| TypeScript |
| 初识vuex |
| vue项目安装包指令收集 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/5 2:31:05- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |