webpack打包步骤以及自己遇到的一些问题

webpack打包

重点关注:

  • entry 入口
  • output 输出
  • loader 处理
  • plugins 插件
  • mode 模式

流程:

  1. 安装

    package.json -- npm init   
    //初始化包描述文件
    
    webpack --npm install webpack webpack-cli -g
    

    webpack-cli 是执行 webpack 的工具。webpack 4.x 版本以后,剥离出了 webpack-cli ,所以webpack包 和 webpack-cli包,需要都安装,但是webpack-cli不是必须的,如vue源码,就替换为了自己的cli,不需用webpack-cli

  2. 配置webpack.config.js

    1. 导入插件:

      1. VueLoaderPlugin

        解析和转换.vue文件,提取出其中的逻辑代码,样式代码以及HTML模板,再分别将它们交给对应的loader去处理。

      2. html-webpack-plugin

        用于编译 Webpack 项目中的 html 类型的文件

      3. mini-css-extract-plugin

        这个插件可以生成css文件,并在html中以<link>方式进行引入
        代码
        在这里插入图片描述

    2. 入口与出口

      ​ 一个问题:

      ​ webpack编译成功,没有任何的报错或警告,但是就是没有生成的文件。
      原因是我在dist前面写了一个/

      在这里插入图片描述

      因为 Node.js 中,__dirname 总是指向被执行 js 文件的绝对路径,path.resolve() 方法会将传入的路径解析为绝对路径,如果在调用 path.resolve() 时传递了斜杠(/),webpack就会找不到这个文件夹

    3. 配置loader处理

        module: {
        rules: [
          {
            test: /\.vue$/,
            use: "vue-loader",
          },
          {
            test: /\.css$/,
            use: ["style-loader", "css-loader"],
          },
          {
            test: /\.(png|jpe?g|gif)$/,
            type: "asset",
            generator: {
              filename: "assets/img/[hash][ext]",
            },
          },
        ],
       },
      
      
      
    4. mode

      告知 webpack 使用哪种模式的内置优化

      有三种

      development、production、none

      开发的时候可以用development,打包更快;

      发布上线的时候可以用production,体积更小

      none 没有做内置优化
      我的整个文件:

        const path = require("path"); //Node.js内置模块
        const { VueLoaderPlugin } = require("vue-loader");
        const HtmlWebpackPlugin = require("html-webpack-plugin");
        const miniCssExtractPlugin = require('mini-css-extract-plugin');
        
        
        module.exports = {
          entry: "./src/main.js", //配置入口文件
          output: {
            path: path.resolve(__dirname, 'dist'), //输出路径,__dirname:当前文件所在路径
            filename: "Bundle.js", //输出的文件名称
            clean:true,//是否清空原有文件
          },
          module: {
            rules: [
              {
                test: /\.vue$/,
                use: "vue-loader",
              },
              {
                test: /\.css$/,
                use: ["style-loader", "css-loader"],
              },
              {
                test: /\.(png|jpe?g|gif)$/,
                type: "asset",
                generator: {
                  filename: "assets/img/[hash][ext]",
                },
              },
            ],
          },
          plugins: [
        
            new VueLoaderPlugin(),
            new HtmlWebpackPlugin({
              template: path.resolve(__dirname, "public/index.html"),
            }),
            new miniCssExtractPlugin({
              filename: "./css/[name].[contenthash].css",
          }),
          ],
          mode: "development", // 设置mode   development为开发环境,production为生产环境
          
        };
      
      
      
    5. 运行

      运行命令

      npm run build
      

      进行打包

    又一个问题:

    项目中使用了路由

    在打包时router-view的内容不显示,控制台也不报错

    是因为在没有后端配合的情况下路由模式为history,页面不会重新加载

    改为hash模式
    在这里插入图片描述

    再重新打包,就可以显示出来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值