webpack打包时如何修改文件名的实现示例

修改webpack打包后的文件名是一个比较常见的需求,这里提供一种通用的实现方式。具体实现步骤如下:

  1. 配置output的filename

webpack.config.js文件中,找到output配置项,将filename选项配置为一个函数,例如:

const path = require('path');

module.exports = {
  output: {
    filename: (chunkData) => {
      return chunkData.chunk.name === 'main' ? 'js/[name].[chunkhash].js' : 'js/[name].[contenthash].js';
    },
    path: path.resolve(__dirname, 'dist')
  }
}

上述代码中,我们将output的filename选项配置为一个函数,该函数接收一个chunkData参数,其中包括chunkData.chunk.name、chunkData.contentHash、chunkData.chunk.contentHash等信息。这里我们根据chunkData.chunk.name值的不同,使用不同的文件名模板。

如果chunkData.chunk.name等于'main',我们使用js/[name].[chunkhash].js作为文件名,其中[name]表示入口文件名,[chunkhash]表示chunk内容的hash值(这里使用chunkhash是因为我们将JS文件分离为单独的文件,需要保证文件内容的变化才能正确更新文件)。如果chunkData.chunk.name不等于'main',则使用js/[name].[contenthash].js作为文件名,其中[name]仍然表示入口文件名,[contenthash]表示chunk内容的hash值。

这样配置后,在打包后的dist目录下可以看到生成的JS文件名符合我们设定的规范。

  1. 配置html-webpack-plugin插件的filename

在使用webpack打包时,我们经常使用html-webpack-plugin插件将打包后生成的JS文件自动引入到HTML文件中,而且HTML文件自身的名称也希望能够得到修改。与此同时,我们还需要将生成的HTML文件保存到合适的文件夹下。

修改html-webpack-plugin插件的filename和path非常简单,只需要在webpack的配置文件中进行如下设置即可:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');

module.exports = {
  output: {
    filename: (chunkData) => {
      return chunkData.chunk.name === 'main' ? 'js/[name].[chunkhash].js' : 'js/[name].[contenthash].js';
    },
    path: path.resolve(__dirname, 'dist')
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
      filename: 'index.html',
      path: path.resolve(__dirname, 'dist/custom-folder'),
    })
  ]
}

上述代码中,我们针对html-webpack-plugin插件进行了如下配置:

  • template选项:指定HTML文件的模板文件路径;
  • filename选项:指定生成的HTML文件名;
  • path选项:指定生成的HTML文件存放在哪个路径下。

我们可以根据需要,将生成的HTML文件存放到任意文件夹下,这里将HTML文件存放在了dist/custom-folder文件夹下。

如果有多个HTML文件需要生成,我们可以通过多次new HtmlWebpackPlugin调用,配置不同的filename和template选项,从而生成多个不同的HTML文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:webpack打包时如何修改文件名的实现示例 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Java的深拷贝与浅拷贝的几种实现方式

    Java的深拷贝和浅拷贝都是用于复制对象的常用方式。在进行对象复制时,我们需要了解两者的区别,根据具体需求选择合适的方式进行对象复制。 什么是浅拷贝? 浅拷贝是指直接复制对象,复制后的对象和原对象共享同一块内存空间(即,原对象和复制后对象都指向同一块内存空间)。如果对象存在引用类型属性,复制后的对象和原对象的引用类型属性指向同一个对象。如果其中一个对象对引用…

    other 2023年6月26日
    00
  • Spring ApplicationContext上下文核心容器深入探究

    Spring ApplicationContext上下文核心容器深入探究 什么是Spring ApplicationContext? Spring ApplicationContext是Spring框架中的一个重要组成部分。它是一个IoC容器,用于管理和组织Spring应用程序中的所有bean。ApplicationContext提供了以下功能: 加载bea…

    other 2023年6月26日
    00
  • 不一样的WIN2003服务器安全配置技巧

    不一样的WIN2003服务器安全配置技巧 介绍 本文将介绍 WIN2003 服务器安全配置的一些不同于常规的技巧,包括一些安全性高、易于管理及遵守最佳实践的方法。 一、开启远程桌面服务 开启远程桌面服务可以让用户通过网络远程访问服务器,方便远程管理。虽然这是一个常规配置,但有几个小技巧可以提高服务器安全性。 1.1 修改默认端口 远程桌面服务默认使用 338…

    other 2023年6月27日
    00
  • excel-vba-我需要解释vba中的activecell.offset

    当使用VBA编写Excel宏时,经常需要使用ActiveCell对象来引用当前选定单元格。ActiveCell.Offset属性可以用于引用相对于当前选定单元格的其他单元格。本文将详细介绍ActiveCell.Offset属性用法。 ActiveCell.Offset属性 ActiveCell.Offset属性用于引用相对于当前选定单元格的其他单元格。该属性…

    other 2023年5月9日
    00
  • mysql中的虚拟列

    Mysql中的虚拟列 Mysql是一个广泛使用的关系型数据库管理系统,它通过使用列来存储和管理数据。在Mysql中,虚拟列是一种特殊的列,它不存储数据,而是根据其他列计算出虚拟列的值。虚拟列的值不会影响数据库表中已存储的数据。 创建虚拟列 在Mysql中,通过在CREATE TABLE语句中使用AS关键字,就可以创建虚拟列。以下是创建虚拟列的示例: CREA…

    其他 2023年3月28日
    00
  • Django+Nginx+uWSGI 定时任务的实现方法

    以下是Django+Nginx+uWSGI定时任务的实现方法的完整攻略: 安装和配置定时任务工具:首先,您需要安装和配置一个定时任务工具,例如Celery或APScheduler。这些工具可以帮助您在Django项目中实现定时任务的调度和执行。 安装和配置Celery:如果您选择使用Celery作为定时任务工具,可以按照以下步骤进行安装和配置: 在Djang…

    other 2023年10月16日
    00
  • python 实验3 循环结构

    下面是关于Python实验3循环结构的完整攻略,包括循环结构的介绍、循环结构的分类、循环结构的应用和两个示例说明。 循环结构的介绍 循环结构是一种程序控制结构,它可以让程序重复执行某个代码块,直到满足某个条件为止。循环结构可以提高程序的效率和灵活性,广泛应用于各种编程语言中。 在Python中,循环结构主要有两种:for循环和while循环。 循环结构的分类…

    other 2023年5月6日
    00
  • C语言数据结构之顺序表和单链表

    C语言数据结构之顺序表和单链表 1. 顺序表 1.1 顺序表的定义 顺序表是一种线性表结构,它的物理存储结构是数组,其数据元素存储在连续的存储单元中。在顺序表中,元素的排列顺序是固定的,元素间的逻辑关系是通过它们在数组中的下标关系进行描述的。 下面是顺序表的定义: #define MAXSIZE 100 // 顺序表的最大长度 typedef struct …

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部