玩转webpack(02):webpack基础使用

news/2024/4/25 15:27:11/文章来源:https://blog.csdn.net/m0_47135993/article/details/128079240

一、核心概念——entry

Entry用于指定webpack打包的入口

 1、单入口(entry是一个字符串)

module.exports = {entry: './src/index.js'
}

2、多入口(entry是一个对象)

module.exports = {entry:{app: './app.js',adminApp: './src/adminApp.js'}
}

二、核心概念——output

output用来告诉webpack如何将编译后的文件输出到磁盘

1、单入口

module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: __dirname + '/dist'}
}

2、多入口

module.exports = {entry:{app: './app.js',adminApp: './src/adminApp.js'},output: {filename: '[name].js', // 通过占位符确保文件名的唯一path: __dirname + '/dist'}
}

三、核心概念——loaders

webpack默认只支持js和json两种文件类型,通过loaders去支持其他文件类型并且把他们转化成有效的模块,并且可以添加到依赖图中。


本身是一个函数,接受源文件作为参数,返回转换的结果。

1、常见的loader

名称描述
babel-loader转换ES6、ES7等JS新特性语法
css-loader支持.css文件的加载和解析
less-loader将less转换为css
ts-loader将TS转换成JS
file-loader进行图片、字体的打包
raw-loader将文件以字符串的形式导入
thread-loader多进程打包JS和CSS

2、loader的用法

module:{rules: [{test: /\.txt$/,    // test:指定匹配规则use: 'raw-loader'    // use:指定使用的loader名称}]
}

四、核心概念——plugins

插件用于bundle文件的优化,资源管理和环境变量注入

作用于整个构建过程

1、常见的plugins

名称描述
CommonsChunkPlugin将chunks相同的模块代码提取成公共js
CleanWebpackPlugin清理构建目录
ExtractTextWebpackPlugin将css从bundle文件里提取成一个独立的css文件
CopyWebpackPlugin将文件或者文件夹拷贝到构建的输出目录
HtmlWebpackPlugin创建html文件去承载输出的bundle
UglifyjsWebpackPlugin压缩JS
ZipWebpackPlugin将打包的资源输出生成一个zip包

2、plugins用法

plugins:[new HtmlWebpackPlugin({    // 放到plugins数组里template: './src/index.html'})
]

五、核心概念——mode

mode用来指定当前的构建环境是:production、develoment还是node

设置mode可以使用webpack内置的函数,默认值为production

1、mode的内置函数功能

选项描述
development设置 process.env.NODE_ENV 的值为 development.开启 NamedChunksPlugin 和 NamedModulesPlugin .
production设置 process.env.NODE_ENV 的值为 production.开启
FlagDependencyUsagePlugin , FlagInclu dedChunksPlugin ModuleConcatenationPlugin , NoEmitOnE rrorsPlugin , Occurrence0rderPlugin ,SideEffectsFl agPlugin 和 TerserPlugin .
none不开启任何优化选项

六、使用

1、使用babel-loader解析ES6和React JSX

babel的配置文件是:.babelrc

(1)安装

npm install -D babel-loader @babel/core @babel/preset-env @babel/preset-react
npm i react react-dom

(2)增加ES6的babel preset配置 (.babelrc)

{"presets": ["@babel/preset-env","@babel/preset-react"]
}

(3)新增文件reactTest.js

'use strict';
import React from "react";
import ReactDOM from "react-dom";class ReactComponents extends React.Component {render() {return <div>Hello React</div>;}
}ReactDOM.render(<ReactComponents />,document.getElementById('root')
)

(4) 修改webpack.config.js

 'use strict'const path = require('path');module.exports = {entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'}]}}

2、css、less、sass解析

css-loader用于加载.css文件,并且转换成commonjs对象

style-loader将样式通过<style>标签插入head中

(1)安装依赖

npm i css-loader style-loader -D

(2)修改webpack.config.js

 'use strict'const path = require('path');module.exports = {entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader',]}]}}

 (3)新增文件reactTest.css

.react-test{font-size: 20px;color: red;
}

(4)修改reactTest.js

'use strict';
import React from "react";
import ReactDOM from "react-dom";
import './reactTest.css';class ReactComponents extends React.Component {render() {return <div className="react-test">Hello React</div>;}
}ReactDOM.render(<ReactComponents />,document.getElementById('root')
)

 (5)解析less和sass

less-loader用于将less转换成css

npm i less less-loader -D
 'use strict'const path = require('path');module.exports = {entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader','less-loader']},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']}]}}

3、解析图片和字体——file-loader

file-loader用于处理文件,也可以用来解析字体

(1)安装依赖 

npm i file-loader -D

(2)修改webpack.config.js

module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader','less-loader']},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: 'file-loader'},{test: /\.(woff|woff2|eot|ttf|otf)/,use: 'file-loader'}]
}

4、解析图片和字体——url-loader

url-loader也可以处理图片和字体

可以设置较小资源自动base64

(1)安装依赖

npm i url-loader -D

(2)修改webpack.config.js

'use strict'const path = require('path');
module.exports = {entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader','less-loader']},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'url-loader',options: {limit: 10240}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: 'file-loader'},]}
}

5、webpack中的文件监听

文件监听是在发现源码发生变化时,自动重新构建出新的输出文件

webpack开启监听模式,有两种方式:

  • 启动webpack命令时,带上 --watch参数
  • 在配置webpack.config.js中设置watch:true

唯一缺陷:每次需要手动刷新浏览器

(1)修改package.json 后运行 npm run watch

{"name": "webpackExercise","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","watch": "webpack --watch"},"keywords": [],"author": "","license": "ISC","devDependencies": {"@babel/core": "^7.20.2","@babel/preset-env": "^7.20.2","@babel/preset-react": "^7.18.6","babel-loader": "^9.1.0","css-loader": "^6.7.2","file-loader": "^6.2.0","less": "^4.1.3","less-loader": "^11.1.0","style-loader": "^3.3.1","url-loader": "^4.1.1","webpack": "^5.75.0","webpack-cli": "^5.0.0"},"dependencies": {"react": "^18.2.0","react-dom": "^18.2.0"}
}

 (2)原理

轮询判断文件的最后编辑时间是否变化

某个文件发生了变化,并不会立刻告诉监听者,而是先缓存起来,等aggregateTimeout

'use strict'const path = require('path');
module.exports = {// 默认false,不开启watch: true,watchOptions: {// 忽略监听的文件ignored: /node_modules/,// 监听到变化后会等300毫秒再去执行,默认300毫秒aggregateTimeout: 300,// 判读文件是否发生变化是通过轮询指定文件,默认每秒轮询1000次poll: 1000},entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader','less-loader']},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'url-loader',options: {limit: 10240}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: 'file-loader'},]}
}

6、热更新:webpack-dev-server(HotModuleReplacementPlugin)

(1)安装依赖 

npm i webpack-dev-server -D

webpack-dev-server不刷新浏览器

webpack-dev-server不输出文件,而是放在内存中

使用HotModuleReplacementPlugin插件

(2)修改package.json 

"scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","watch": "webpack --watch","dev": "webpack-dev-server --open"},

(3)修改webpack.config.js 

'use strict'const path = require('path');
const webpack = require('webpack');
module.exports = {// // 默认false,不开启// watch: true,// watchOptions: {//     // 忽略监听的文件//     ignored: /node_modules/,//     // 监听到变化后会等300毫秒再去执行,默认300毫秒//     aggregateTimeout: 300,//     // 判读文件是否发生变化是通过轮询指定文件,默认每秒轮询1000次//     poll: 1000// },entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name].js'},mode: 'development',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader','less-loader']},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'url-loader',options: {limit: 10240}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: 'file-loader'},]},plugins: [new webpack.HotModuleReplacementPlugin()],devServer: {static: './dist',hot: true}
}

 注:在新版的webpack-dev-server中,contentBase已经被移除了,用static替代。

7、热更新:webpack-dev-middleware

webpack-dev-middleware将webpack输出的文件传输给服务器

适用于灵活的定制场景


webpack compile:将js编译成bundle

HMR server:将热更新的文件输出给HMR Runtime

bundle server:提供文件在浏览器的访问

HMR runtime:会被注入到浏览器,更新文件的变化

bundle.js:构建输出的文件 

8、文件指纹策略 

打包后输出的文件名的后缀,通常做的是文件发布的版本管理

(1)文件指纹如何生成

  • Hash:和整个项目的构建相关,只要项目文件有修改,整个项目构建的hash值就会更改
  • Chunkhash:和webpack打包的chunk有关,不同的enty会生成不同的chunkhash值
  • Contenthash:根据文件内容来定义hash,文件内容不变,则contenthash不变

(2)js的文件指纹设置

设置output的filename,使用 [chunkhash]

(3)css的文件指纹设置

// 提取css文件
npm i mini-css-extract-plugin -D

设置MiniCssExtractPlugin的filename,使用 [contenthash]

(4)图片或字体的文件指纹设置

设置file-loader的name,使用 [hash] 

占位符名称含义
[ext]资源后缀名
[name]文件名称
[path]文件的相对路径
[folder]文件所在的文件夹
[contnthash]文件内容的hash,默认md5生成
[hash]文件内容的hash,默认md5生成
[emoji]一个随机的指代文件内容的enoj

(5)修改package.json

"scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack --config webpack.prod.js","watch": "webpack --watch","dev": "webpack-dev-server --config webpack.dev.js --open"},

 (6)新建文件webpack.prod.js,并将原有的webpack.config.js改为webpack.dev.js

'use strict'const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {entry: {main: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name]_[chunkhash:8].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: [MiniCssExtractPlugin.loader,'css-loader']},{test: /\.less$/,use: [MiniCssExtractPlugin.loader,'css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'file-loader',options: {name: '[name]_[hash:8].[ext]'}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: [{loader: 'file-loader',options: {name: '[name]_[hash:8].[ext]'}}]},]},plugins: [new MiniCssExtractPlugin({filename: '[name]_[contenthash:8].css'})]
}

9、HTML、CSS、JS压缩 

(1)JS压缩

webpack5内置了terser-webpack-plugin,如果需要额外配置需要安装terser-webpack-plugin并进行一系列调整

(2)CSS文件的压缩 

webpack5中可使用css-minimizer-webpack-plugin

npm install css-minimizer-webpack-plugin --save-dev
// webpack.prod.js
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");// ...plugins: [new MiniCssExtractPlugin({filename: '[name]_[contenthash:8].css',})],optimization: {minimizer: [new CssMinimizerPlugin(),],},

 (3)HTML压缩

npm install --save-dev html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');plugins: [new MiniCssExtractPlugin({filename: '[name]_[contenthash:8].css',}),new HtmlWebpackPlugin({template: path.join(__dirname, 'src/index.html'),filename: 'index.html',chunks: ['index'],inject: true,minify: {html5: true,collapseWhitespace: true,preserveLineBreaks: false,minifyCSS: true,minifyJS: true,removeComments: false}}),],

10、一份prod配置

'use strict'const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {entry: {index: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name]_[chunkhash:8].js'},mode: 'production',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: [MiniCssExtractPlugin.loader,'css-loader']},{test: /\.less$/,use: [MiniCssExtractPlugin.loader,'css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'file-loader',options: {name: '[name]_[hash:8].[ext]'}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: [{loader: 'file-loader',options: {name: '[name]_[hash:8].[ext]'}}]},]},plugins: [new MiniCssExtractPlugin({filename: '[name]_[contenthash:8].css',}),new HtmlWebpackPlugin({template: path.join(__dirname, 'src/reactTest.html'),filename: 'reactTest.html',chunks: ['reactTest'],inject: true,minify: {html5: true,collapseWhitespace: true,preserveLineBreaks: false,minifyCSS: true,minifyJS: true,removeComments: false}}),new HtmlWebpackPlugin({template: path.join(__dirname, 'src/index.html'),filename: 'index.html',chunks: ['index'],inject: true,minify: {html5: true,collapseWhitespace: true,preserveLineBreaks: false,minifyCSS: true,minifyJS: true,removeComments: false}}),],optimization: {minimize: true,minimizer: [new CssMinimizerPlugin(),],},
}

11、一份dev配置

'use strict'const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {// // 默认false,不开启// watch: true,// watchOptions: {//     // 忽略监听的文件//     ignored: /node_modules/,//     // 监听到变化后会等300毫秒再去执行,默认300毫秒//     aggregateTimeout: 300,//     // 判读文件是否发生变化是通过轮询指定文件,默认每秒轮询1000次//     poll: 1000// },entry: {index: './src/index.js',reactTest: './src/reactTest.js'},output: {path: path.join(__dirname, 'dist'),filename: '[name][chunkhash].js'},mode: 'development',module: {rules: [{test: /\.js$/,use: 'babel-loader'},{test: /\.css$/,// use数组中是从后往前调用的use: ['style-loader','css-loader',]},{test: /\.less$/,use: ['style-loader','css-loader','less-loader']},{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'url-loader',options: {limit: 10240}}]},{test: /\.(woff|woff2|eot|ttf|otf)/,use: 'file-loader'},]},plugins: [new webpack.HotModuleReplacementPlugin(),new HtmlWebpackPlugin({template: path.join(__dirname, 'src/reactTest.html'),filename: 'reactTest.html',chunks: ['reactTest'],inject: true,minify: {html5: true,collapseWhitespace: true,preserveLineBreaks: false,minifyCSS: true,minifyJS: true,removeComments: false}}),new HtmlWebpackPlugin({template: path.join(__dirname, 'src/index.html'),filename: 'index.html',chunks: ['index'],inject: true,minify: {html5: true,collapseWhitespace: true,preserveLineBreaks: false,minifyCSS: true,minifyJS: true,removeComments: false}}),],devServer: {static: './dist',hot: true}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_39288.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cpu设计和实现(协处理器cp0)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 除了通用计算器负责控制和计算之外&#xff0c;cpu如果需要正常有序地运行&#xff0c;还需要一定地协处理器来帮助完成对应地工作。在mips下面&am…

Cisco ASA基础——安全算法与基本配置

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 本章重点 一.Cisco防火墙简介 1.什么是防火墙 2.防火墙的作用…

Express操作MongoDB

一、Express框架通过Mongoose模块操作MongoDB数据库 1、MongoDB数据库&#xff1a; ​ &#xff08;1&#xff09;存放数据的格式&#xff1a;key-value ​ &#xff08;2&#xff09;数据库(database) ——- 集合(collection) ——- 文档(document) ​ &#xff08;3&…

用字典统计序列中键和值的数量collections.Counter()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 用字典统计序列中键和值的数量 collections.Counter() 选择题 以下python代码结果错误的一项是? from collections import Counter myList[a,b,a] print(【显示】myList,myList) myDictCoun…

mapreduce搭建

一.虚拟机安装CentOS7并配置共享文件夹 二.CentOS 7 上hadoop伪分布式搭建全流程完整教程 三.本机使用python操作hdfs搭建及常见问题 四.mapreduce搭建 五.mapper-reducer编程搭建 mapreduce搭建一、配置1.创建mapred-site.xml文件2.编辑mapred-site.xml二、打开hadoop0.删除da…

小学生学Arduino---------点阵(一)静态图片显示

今天来看一下&#xff0c;点阵模块这一模块可以做出非常有意思的东西。 学习目标&#xff1a; 1、了解点阵原理 2、掌握图形绘制&#xff08;心形、三角形等&#xff09; 3、掌握图形显示器的功能 4、掌握led点阵屏幕的功能 5、搭建电路 6、编写程序 一、点阵的原理 LED点阵屏…

Leu-Trp-Leu-COOH,42293-99-2

编号: 122381中文名称: 三肽Leu-Trp-Leu英文名: Leu-Trp-LeuCAS号: 42293-99-2单字母: H2N-LWL-OH三字母: H2N-Leu-Trp-Leu-COOH氨基酸个数: 3分子式: C23H34N4O4平均分子量: 430.54精确分子量: 430.26等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -2.3333333333333疏…

Qt QCustomPlot 点状网格线实现和曲线坐标点拾取

Qt QCustomPlot 点状网格线实现和曲线坐标点拾取 文章目录Qt QCustomPlot 点状网格线实现和曲线坐标点拾取摘要我想实现的效果点阵的实现第一版本&#xff0c;使用QPen Style第二版本&#xff0c;通过设置背景第三版本&#xff0c;回到QPen Style取曲线上的点关键字&#xff1a…

VS Code + Vue 开发环境搭建

1、下载并安装 Visual Studio Code 2019 2、Visual Studio Code 2019安装成功后&#xff0c;打开VS Code 工具点击左侧【扩展】菜单&#xff0c;在搜索栏中输入 Chinese 查找中文语言汉化包插件下载安装&#xff0c;然后重启VS Code 3、点击左侧【扩展】菜单&#xff0c;在搜…

WebDAV之葫芦儿·派盘+静读天下

静读天下 支持webdav方式连接葫芦儿派盘。 如今,很多人都喜欢在手机上进行阅读,所以想要获得更好的阅读体验,一款实用的电子书就显得尤为重要了,因此,静读天下这款纯正的本地电子书阅读软件您值得拥有,而且还支持本地电子书备份到葫芦儿派盘。 静读天下是一款备受千万…

【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】

问题起源 在做一道题的时候&#xff0c;涉及到了由内网到外网再到内网时的IP地址转换。在外网的时候&#xff0c;答案说的是不能够用私有IP地址作为源IP地址&#xff0c;然后疑问产生了&#xff1a;如果不能用私有IP地址作为目的地址&#xff0c;他又怎么能够找到那个主机呢&a…

在 Node.js 中操作 Redis

在 Node.js 中操作 Redis Node.js 中可以操作 Redis 的软件包推荐列表&#xff1a;https://redis.io/clients#nodejs。 推荐下面两个&#xff1a; node-redisioredis 这里主要以 ioredis 为例。 ioredis 是功能强大的 Redis 客户端&#xff0c;已被世界上最大的在线商务公司…

MySQL日志管理、备份与恢复

文章目录一、mysql常用日志1、概述①、错误日志②、二进制日志③、中继日志④、慢查询日志⑤、通用查询日志&#xff0c;用来记录MySQL的所有连接和语句&#xff0c;默认是关闭的2、数据库中查询日志状态①、查看二进制日志开启状态②、查看慢查询日志功能是否开启③、查看慢查…

GAN生成漫画脸

最近对对抗生成网络GAN比较感兴趣&#xff0c;相关知识点文章还在编辑中&#xff0c;以下这个是一个练手的小项目~ (在原模型上做了&#xff0c;为了减少计算量让其好训练一些。) 一、导入工具包 import tensorflow as tf from tensorflow.keras import layersimport numpy a…

业务:财务会计业务知识

一、引言 会计是以货币为主要计量单位&#xff0c;对企业、事业、机关、团体及其他经济组织的经济活动进行记录、计算、控制、分析、报告&#xff0c;以提供财务和管理信息的工作。会计的职能主要是反映和控制经济活动过程&#xff0c;保证会计信息的合法、真实、准确和完整&a…

校园论坛网站设计设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

网页JS自动化脚本(四)修改元素的尺寸颜色显隐状态

修改元素尺寸 在定位到了元素之后, 我们就可以对元素进行一些修改了,我们先来修改元素泊宽度以及高度 window.onloadfunction(){var theElementdocument.querySelector("img.undertips-link-lefticon");theElement.style.width"100px";theElement.style.…

命令模式

文章目录思考命令模式1.命令模式的本质2.何时选用命令模式3.优缺点4.实现耦合写法命令模式优化耦合写法命令模式实现撤销命令模式实现厨师做菜命令模式实现排队命令模式实现日志持久化思考命令模式 命令模式就是解耦强耦合代码&#xff0c;用户只关心功能的实现&#xff0c;开发…

win11该文件没有与之关联的应用怎么办

win11用户在使用电脑的时候遇到了“该文件没有与之关联的应用”的提示&#xff0c;这是怎么回事呢&#xff1f;应该怎么办呢&#xff1f;出现这个情况应该是注册表被误删了&#xff0c;大家需要新建一个文本文档&#xff0c;然后输入下文提供的指令&#xff0c;之后将其重命名为…

linux不显示当前路径的解决方法

1.输入vim ~/.bashrc进入用户的shell环境变量的配置文件(可以设置环境变量以及通过alias设置别名&#xff09; 2.按下“i”键进入编辑模式(底部显示INSERT&#xff09; 3.修改\w为$PWD&#xff1a; 修改为&#xff1a; 4.按“esc”键后输入":wq"保存并退出&#xff…