首页 > 其他分享 >webpack5 学习手册

webpack5 学习手册

时间:2022-11-05 17:34:48浏览次数:52  
标签:webpack5 js loader 学习 webpack html 手册 config css

1. 初始化 webpack 项目 npm init -y (初始化一个 package.json 文件)

2. npm i webpack webpack-cli -D 下载这两个依赖包

3. npx webpack ./src/main.js --mode development //【 入口文件 打包模式 】 npx webpack 指令

// npx webpack ./src/main.js --mode production // 生产环境

4. 当你的项目下创建了 webpack.config.js 并在里面配置了相应 可以直接npx webpack 即可运行打包;【同3的升级版】

5. 配置css 规则
npm install style-loader css-loader --save-dev

{
test: /\.css$/,
use: [
//执行顺序,从左到右 (从上到下)
"style-loader", //将js中的css创建style属性添加到html中生效
"css-loader", //将css资源编译成commonjs的模块到js中
],
},

6. npm install --save-dev html-webpack-plugin

plugins: [new HtmlWebpackPlugin()],

7. npm install --save-dev webpack-dev-server 执行 npx webpack serve //开发环境 修改自动打包

devServer: {
static: {
directory: path.join(__dirname, "public"),
},
compress: true,
port: 9000,
},

8. 为了配置 开发环境与生产环境的config 新建目录config 创建创建 webpack.config.dev.js webpack.config.prod.js
执行 npx webpack serve --config ./config/webpack.config.dev.js 就可以启动开发环境
同理: npx webpack --config ./config/webpack.config.prod.js 打包生产环境资源

9. 在package.json 配置

"scripts": {
"dev": "webpack serve --config ./config/webpack.config.dev.js",
"build": "webpack --config ./config/webpack.config.prod.js"
},

启动开发环境 :npm run dev
打包生产环境:npm run build

10. npm install --save-dev mini-css-extract-plugin //将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。
<见下面的webpack.config.prod.js>

11. npm i postcss-loader postcss postcss-preset-env -D //样式兼容性处理
注:加载器中的配置 要在css-loader下面 在less-loader sass-loader的前面

12 npm install css-minimizer-webpack-plugin --save-dev // 压缩css

13. devtool 脚本的映射
开发环境 devtool:"cheap-module-source-map" //错误只提示到行
生产环境 devtool:"source-map" //错误提示到行、列

14. 热模块替换 (开发环境)
dev-serve 设置 hot:true
15: 加载器里面 oneOf <见下面的webpack.config.prod.js>

webpack.config.prod.js:

const path = require("path"); // node 核心模块  专门处理路径问题
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
//封闭一个方法
function getStyleLoader(pre) {
  return [
    //可以使用多个loader
    //执行顺序,从左到右 (从上到下)
    // "style-loader", //将js中的css创建style标签添加到html中生效
    MiniCssExtractPlugin.loader, //提取css成单独的文件
    "css-loader", //将css资源编译成commonjs的模块到js中
    {
      loader: "postcss-loader",
      options: {
        postcssOptions: {
          plugins: [
            "postcss-preset-env", //能解决大多数样式兼容的问题
          ],
        },
      },
    },
    pre,
  ].filter(Boolean); //filter(undefined) 过虑掉传空的值
}

module.exports = {
  //入口
  entry: ["./src/main.js"], //相对路径  , "./public/index.html", "./public/test.html"
  //输出
  output: {
    //文件的输出路径
    // __dirname nodejs的变量 代表当前文件的文件夹目录
    path: path.resolve(__dirname, "../dist"), //绝对路径
    filename: "js/main.js", //输出到对应的目录下
    clean: true, //自动清空上次打包的内容
  },
  //加载器
  module: {
    rules: [
      //loader 的配置
      {
        oneOf: [
          //只被其中一个处理
          {
            test: /\.css$/,
            //loader:'xxx',  // 只能使用一个loader
            use: getStyleLoader(),
          },
          {
            test: /\.less$/,
            use: getStyleLoader("less-loader"),
            // [
            //   MiniCssExtractPlugin.loader,
            //   "css-loader",
            //   {
            //     loader: "postcss-loader",
            //     option: {
            //       postcssOptions: {
            //         plugins: [
            //           "postcss-preset-env", //能解决大多数样式兼容的问题
            //         ],
            //       },
            //     },
            //   },
            //   "less-loader",
            // ], //下载 less-loader 依赖
          },
          {
            test: /\.sass$/,
            use: getStyleLoader("sass-loader"),
            // [
            //   MiniCssExtractPlugin.loader,
            //   "css-loader",
            //   {
            //     loader: "postcss-loader",
            //     option: {
            //       postcssOptions: {
            //         plugins: [
            //           "postcss-preset-env", //能解决大多数样式兼容的问题
            //         ],
            //       },
            //     },
            //   },
            //   "sass-loader",
            // ], //下载 sass-loader 依赖
          },
          {
            test: /\.(png|jpe?g|gif|webp|svg)$/,
            type: "asset",
            parser: {
              dataUrlCondition: {
                //小于10kb的图转化为base64
                //优化 减少请求数 缺点:体积会变大一丢丢
                maxSize: 10 * 1024, //10kb
              },
            },
            generator: {
              //输出图片名称
              //hash:10  hash值取前10位
              filename: "images/[hash:10][ext]",
            },
          },
        ],
      },
    ],
  },
  //插件
  plugins: [
    //插件的配置
    new HtmlWebpackPlugin({
      //模板  以public/index.html 为模板
      //新的html 文件特点 1:结构和原文一致 2.自动引入打包输出的资源
      template: path.resolve(__dirname, "../public/index.html"),
    }),
    new MiniCssExtractPlugin({
      filename: "css/main.css",
    }),
    new CssMinimizerPlugin(),
  ],

  //模式
  mode: "production", //production
  devtool: "source-map", //错误提示到行、列
};

  webpack.config.dev.js:

const path = require("path"); // node 核心模块  专门处理路径问题
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  //入口
  entry: "./src/main.js", //相对路径
  //输出
  output: {
    //文件的输出路径
    // __dirname nodejs的变量 代表当前文件的文件夹目录
    path: path.resolve(__dirname, "../dist"), //绝对路径
    filename: "js/main.js", //输出到对应的目录下
    clean: true, //自动清空上次打包的内容
  },
  //加载器
  module: {
    rules: [
      //loader 的配置
      {
        oneOf: [
          //只被其中一个处理
          {
            test: /\.css$/,
            //loader:'xxx',  // 只能使用一个loader
            use: [
              //可以使用多个loader
              //执行顺序,从左到右 (从上到下)
              "style-loader", //将js中的css创建style标签添加到html中生效
              "css-loader", //将css资源编译成commonjs的模块到js中
            ],
          },
          {
            test: /\.less$/,
            use: ["style-loader", "css-loader", "less-loader"], //下载 less-loader 依赖
          },
          {
            test: /\.sass$/,
            use: ["style-loader", "css-loader", "sass-loader"], //下载 sass-loader 依赖
          },
          {
            test: /\.(png|jpe?g|gif|webp|svg)$/,
            type: "asset",
            parser: {
              dataUrlCondition: {
                //小于10kb的图转化为base64
                //优化 减少请求数 缺点:体积会变大一丢丢
                maxSize: 10 * 1024, //10kb
              },
            },
            generator: {
              //输出图片名称
              //hash:10  hash值取前10位
              filename: "images/[hash:10][ext]",
            },
          },
        ],
      },
    ],
  },
  //插件
  plugins: [
    //插件的配置
    new HtmlWebpackPlugin({
      //模板  以public/index.html 为模板
      //新的html 文件特点 1:结构和原文一致 2.自动引入打包输出的资源
      template: path.resolve(__dirname, "../public/index.html"),
    }),
  ],
  //开发服务器
  devServer: {
    // static: {
    //   directory: path.join(__dirname, "public"),
    // },
    host: "localhost",
    compress: true,
    port: 9000,
    open: true,
    hot: true,
  },
  //模式
  mode: "development", //production
  devtool: "cheap-module-source-map", //错误只提示到行
};

  

标签:webpack5,js,loader,学习,webpack,html,手册,config,css
From: https://www.cnblogs.com/tap819/p/16860639.html

相关文章

  • 学习笔记
    JavaScript学习BOM操作BOM是浏览器对象模型(BrowserObjectModel)。它使JavaScript有能力与浏览器进行“对话”。alert():警告弹窗confirm():确定弹窗prompt():提示弹框......
  • 【漏洞学习及复现】Log4j2(CVE-2021-44228)漏洞复现
    Log4j2漏洞(CVE-2021-44228)Log4j2ApacheLog4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开......
  • shell-函数学习笔记二
    shell函数的定义#方法一functionname{command...command}#方法二name(){command...command}函数的调用直接使用函数名调用,可以将函数......
  • SpringMvc——拦截器学习
    1、拦截器(Interceptor)是一种动态拦截方法调用的机制作用:在指定的方法调用前后执行预先设定后的的代码阻止原始方法的执行2、拦截器与过滤器区别归属不同:Filter属于Servle......
  • 学习笔记——元数据、blob类型的元素
    2022-11-04一、元数据1、元数据的说明:元数据就是指描述数据的数据,例如:数据有多少列、数据的列名称等。2、使用的代码:1ResultSetMetaDatametaData=rs.getMeta......
  • mysql 8系备份学习总结
    一、背景:1、 PerconaXtrabackup8.0.25不支持低于MySQL8.0的备份(因为MySQL8.0在数据字典、redolog中和之前版本不兼容),因此2.4版本的也不支持8系的备份     ......
  • shardingsphere-jdbc 水平分表学习记录
    放在自己博客里搬过来一份~前司使用的是自己魔改的TDDL,在家时间比较多就尝试学一些业内比较常用的中间件.这里记录一下学习中遇到的一些问题.环境设置的比较简单(太......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第十周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标:cpu调度,进程控制,先到先......
  • 《Unix/Linux系统编程》第十二章学习笔记 20201209戴骏
    第十二章、块设备I/O和缓冲区管理知识点归纳一、块设备I/O缓冲区I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk......
  • 学习笔记-Windows 基础服务搭建
    Windows基础服务搭建磁盘管理例1新建两个10G的硬盘,名称为A-10-1、A-10-2,挂载到主机;新建镜像卷,使用所有空间,驱动器号为D.1.开始——管理工具——计算机......