Vue3基础之Webpack

Webpack是一个模块化打包工具,可以将互相依赖的HTML、CSS、Js或是图片字体等经过一些列处理,打包成静态的前端项目

可以将项目中的所有模块打包成一个或多个包,只在需要时进行加载,支持热模块替换,可以压缩打包后的代码,在开发过程中,当发生代码变化时,可以实时更新浏览器中的模块,拥有广泛的插件生态系统

首先,在需要使用webpack的文件夹下

npm init -y 初始化

npm add webpack-cli --dev 安装到开发者环境中

使用npx webpack打包

webpack配置

在根目录下创建一个webpack.config.js文件

进行配置

const path = require("path");

module.exports = {

    mode: "development",

    entry: "./src/index.js",

    output: {

        filename: "dist.js",

        path: path.resolve(__dirname,"dist"),

    }

}

mode为开发者模式

entry选择与config文件的src目录中下index.js作为入口文件

output为配置输出名字

打包css文件与图片

需要安装

npm add --dev style-loader css-loader

自动生成html文件

npm add html-webpack-plugin --dev

兼容低版本浏览器

npm add --dev babel-loader @babel/core @babel/preset-env

压缩打包之后的js代码

npm add --dev terser-webpack-plugin

无需命令自动打包

npm add --dev webpack-dev-server

还需要再package.json中添加

  "scripts": {

    "start": "webpack serve --open"

  },

 避免浏览器缓存js文件,我们可以给生成的文件修改文件名

配置可视化打包工具

npm add --dev webpack-bundle-analyzer

出现的文件分析图为

整体的配置文件webpack.config.js为

const path = require("path");

const HtmlWebpackPlugin = require("html-webpack-plugin");

const TerserPlugin = require("terser-webpack-plugin"); // 修正了这里,原名为 TerserPlugon,应为 TerserPlugin

const { Static } = require("vue"); // 这一行在这里没有被使用,可以移除

const BundleAnalyzerPlugin = require("webpack-bundle-analyzer"); // 修正了这里,原名为 BundelAnalyzerPlugin

module.exports = {

  // 指定构建模式为 development(开发模式),这会影响资源的优化和压缩等

  mode: "development",

  // 指定应用的入口文件

  entry: './src/index.js',

  // 配置 source map,这里使用的是 inline-source-map,源代码和 source map 会在同一个文件中

  devtool: "inline-source-map",

  // 输出配置

  output: {

    // 输出文件的名称,[name] 是占位符,代表 entry 中的名称,[contenthash] 是文件内容的哈希值

    filename: '[name].[contenthash].js',

    // 输出文件的目录

    path: path.resolve(__dirname, "dist")

  },

  // 优化配置

  optimization: {

    // 是否启用压缩

    minimize: true,

    // 压缩器配置,这里使用了 TerserPlugin 来压缩 JavaScript 文件

    minimizer: [new TerserPlugin()]

  },

  // 开发服务器配置

  devServer: {

    // 静态资源服务路径

    static: './dist'

  },

  // 解析配置

  resolve: {

    // 设置别名,这里为 'utils' 设置了一个别名,指向 src/utils 目录

    alias: {

      utils: path.resolve(__dirname, "src/utils")

    }

  },

  // 模块配置

  module: {

    // 模块规则,用于处理不同文件类型的加载器

    rules: [

      // 处理 CSS 文件的规则

      {

        test: /\.css$/i,

        use: ["style-loader", "css-loader"]

      },

      // 处理图片文件的规则

      {

        test: /\.(png|svg|jpg|jpeg|gif)$/i,

        type: "asset/resource"

      },

      // 处理 JavaScript 文件的规则

      {

        test: /\.js$/,

        exclude: /node_modules/, // 排除 node_modules 目录

        use: {

          loader: "babel-loader",

          options: {

            presets: ["@babel/preset-env"] // Babel 预设,用于转译 ES6+ 代码为 ES5

          }

        }

      }

    ]

  },

  // 插件配置

  plugins: [

    // HtmlWebpackPlugin 插件,用于自动生成 HTML 文件

    new HtmlWebpackPlugin({

      title: "博客列表"

    }),

    // BundleAnalyzerPlugin 插件,用于分析打包后的文件大小和依赖关系

    new BundleAnalyzerPlugin.BundleAnalyzerPlugin()

  ]

};

之后,项目就能正确运行或是部署在服务器中

Loader

sytle-loader将css文件处理之后插入到HEAD中

css-loader将css处理为webpack能处理的类型

sass-loader、less-loader将sass与less转化为css

file-loader打包图片与文字

Plugin

HtmlWebpackPlugin 自动创建html5文件,将打包之后的js注入进去

TerserPlugin,压缩js代码

BundleAnalyzerPlugin 提供可视化的文件大小与依赖的界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值