| |
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:32:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |