webpack-基本使用、核心概念、处理样式资源、图片优化


在这里插入图片描述

🐰 w e b p a c k 简介 \color{red}{webpack简介} webpack简介

webpack基本使用

它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去, 输出的文件就是编译好的文件,我们把该文件叫做bundle,可以自定义名称

功能介绍

  • 开发模式:仅能编译JS中的 ES Module语法
  • 生产模式:能编译JS中的ES Module语法,还能压缩JS代码

开发模式

开发模式就是我们开发代码时使用的模式

  • 编译代码,使浏览器能识别运行。开发时我们有样式资源、字体图标、图片资源、html资源等,webpack默认是不能处理这些资源的、我们需要加载配置来编译这些资源。
  • 代码质量检查,树立代码规范,检查代码规范和格式、统一风格、让代码更优雅美观

生产模式

🐰 核心概念

五大核心概念

  • entry(入口文件)
  • output (出口文件)官方文档
  • loader(加载器) 官方文档
  • plugins(插件)
  • mode(模式)

webpack的配置文件

基本配置 webpack.config.js

var path = require('path');
module.exports = {
    mode: 'development',
    // 入口文件
    entry: './main.js',
    // 输出
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'foo.bundle.js'
    },
    // 加载器
    module: {
        rules: []
    },
    // 插件
    plugins: [],
    // 模式
    mode: 'development',
};

🐰 处理样式资源 − c s s 、 l e s s 、 s a s s 、 s t y l u s \color{red}{处理样式资源-css、less、sass、stylus} 处理样式资源csslesssassstylus

处理css

安装css-loader,css-loader 会对 @import 和 url() 进行处理,就像 js 解析 import/require() 一样

npm install --save-dev css-loader

webpack.config.js配置

// 加载器
    module: {
        rules: [
            {
                test: /\.css/i,
                //执行顺序,从右到左
                use: ["style-loader", "css-loader"]
            }
        ]
    },

css-loader => 将css资源编译成common.js的模块到js中
style-loader => 将js中css通过创建style标签添加到文件中生效

处理less

下载less-loader,webpack 将 Less 编译为 CSS 的 loader

npm install less less-loader --save-dev

webpack.config.js配置

{
	test: /\.less/i,
	use: ["style-loader", "css-loader", "less-loader"]
}

处理Sass

下载sass-loader ,加载 Sass/SCSS 文件并将他们编译为 CSS

npm install sass-loader -d

webpack.config.js

{
	test: /\.s[ac]ss$/i,
	use: ["style-loader", "css-loader", "sass-loader"]
}

起点文件 index.js,需要引入文件
import ‘./index.css’

html文件需要引入这个bundle.js文件就行了

<body>
<script src="../bundle/bundle.js">

</script>
</body>

处理stylus

下载stylus-loader,一个 webpack 的 Stylus loader。将 Stylus 文件编译为 CSS

npm i stylus-loader -d

webpack.config.js

{
	test: /\.styl$/,
	loader: "stylus-loader", // 将 Stylus 文件编译为 CSS
	// 这种写法,只能加载一个loader
}

处理图片

webpack.config.js

{
	test: /\.(png|jpg|gif|webp)$/,
	type: "asset"
}

🐰 处理 J S − E s l i n t 、 B a b e l \color{red}{处理JS-Eslint、Babel} 处理JSEslintBabel

Eslint(插件)

可组装的JavaScript和JSX工具

安装

npm install eslint-webpack-plugin eslint --save-dev

插件的话需要引入

const ESLintPlugin = require('eslint-webpack-plugin');
// 插件
plugins: [
    new ESLintPlugin({
        context: path.resolve(__dirname, "src") // 检查文件范围
    })
],

接下来就需要创建一个配置文件,来配置我们的eslint相关配置

  • .eslintrc.*:新建文件,位于项目根目录(只是格式不同)
    • .eslintrc
    • .eslintrc.js
    • .eslintrc.json
  • package.json中的eslintConfig:不需要创建文件,在原有的文件基础上写
    ESLint 会查找和自动读取他们,所以以上配置文件只需要存在一个即可

.eslintrc.js配置

module.exports = {
   // 解析选项
   parserOptions: {},
   //具体检查规则
   rules: {},
   // 继承检查规则
   extends: []
}

parseOptions

官方文档,更多的配置

parserOptions: {
    ecmaVersion: 6, // ES 语法版本
    sourceType: 'module', // ES 模块化
    ecmaFeatures: {  // ES其他特性
        jsx: true    // 开启JSX
    }
},
rules
  • off | 0 关闭规则
  • warn | 1 开启规则
  • error | 2 开启规则(会导致程序退出)

官方文档,更多的配置

rules: {
    semi: "error", //禁止使用分号
    'array-callback-return': 'warn',// 回调函数中要有return 语句
    'default-case': [
        'warn',       // 要求switch语句中有default分支,否则警告
        {
            commentPattern: '^no default$'  // 允许在最后注释 no default,就不会有警告了
        }
    ]
},
extends

Eslint 常见指令

.eslintignore

跟git的那个功能类似,都是忽略一些不必要检查的文件

babel

位于项目根目录

  • 新建配置文件
    • ./babel.config.js
    • .babel.config.json
    • .babelrc
    • .babelrc.json
  • packjson中的babel也可以写

以上的文件存在一个即可
安装
此 package 允许你使用 Babel 和 webpack 转译 JavaScript 文件

npm install -D babel-loader @babel/core @babel/preset-env webpack

presets预设

  • @babel/preset-env 用来编译新版本的JavaScript
  • @babel/preset-react 用来编译React.jsx的预设
  • @babel/preset-typescript 编译TypeScript语法的预设

配置

webpack.config.js

module: {
  rules: [
    {
      test: /\.m?js$/,
      exclude: /(node_modules|bower_components)/,
      // 可以单独拿出来,放在.babelrc.js
      // use: {
       //     loader: 'babel-loader',
       //     options: {
       //         presets: ['@babel/preset-env']
       //     }
       // }
    }
  ]
}

.babelrc.js

module.exports = {
    // 预设
    presets:["@babel/preset-env"]
}

🐰output 相关配置

修改输出文件位置

有目录格式的文件输出
我们可以看 output 这一模块

// 输出
output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
},
// 加载器
module: {
    rules: [
        {
            test: /\.(png|jpe?g|gif|webp)$/,
            type: "asset",
            generator: {
                filename: 'static/images/[hash][ext][query]'
            }
        }
    ]
}

清空上次输出文件夹位置

增加一个clean为true的配置项就可以了

output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
    clean: true
},

开发服务devServer

这里配置devServer相关配置,前端配置代理也是在这里

devServer: {
    host: 'localhost', // 启动服务器域名
    port: 3000,    // 端口
    open: true,    // 是否自动打开浏览器
},

🐰图片优化

图片转base64

小图片不转为base64格式,可以减少对图片的单独请求

{
	test: /\.(png|jpe?g|gif|webp)$/,
	type: "asset",
	parser: {
		dataUrlCondition: {
			// 小于100kb的转为base64
			maxSize: 100 * 1024
			}
		}
}

🐰 生产模式配置 \color{red}{生产模式配置} 生产模式配置

提取css成单独文件

前面咱们在处理css中,是打包进入了js文件之中
安装下载

npm install --save-dev mini-css-extract-plugin

webpack.config.js配置

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  plugins: [new MiniCssExtractPlugin()],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
};

结果会形成单独的css文件
在这里插入图片描述

css 兼容性处理

安装postcss-preset-env

npm install --save-dev postcss-loader postcss

在webpack.config.js中配置,要注意配置所在的位置顺序

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'postcss-loader',
            options: {
              postcssOptions: {
                plugins: [
                  [
                    'postcss-preset-env',
                    {
                      // 其他选项
                    },
                  ],
                ],
              },
            },
          },
        ],
      },
    ],
  },
};

我们也可以控制兼容的范围
在package.json中

"browserslist": [
	 "last 2 version",     // 最近两个版本之内
	 "> 1%",               // 覆盖市面上99%的浏览器
	 "not dead"            //
]

css压缩

安装css-minimizer-webpack-plugin

npm install css-minimizer-webpack-plugin --save-dev

webpack.config.js

const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
module.exports = {
  module: {
	  optimization: {
	    minimizer: [
	      new CssMinimizerPlugin(),
	    ],
	  },
};

html js压缩 (生产模式,自动压缩)

🐰参考资料

B站教学视频
官方文档

会持续更新,还未更新完

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李和贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值