wbepack中output.filename和output.chunkFilename

对于webpack配置中filename和chunkFilename在使用中有些不懂的地方,研究之后记录如下。

filename: string | function

此选项决定了每个输出 bundle 的名称。这些 bundle 将写入到 output.path 选项指定的目录下。

对于单个入口起点,filename 会是一个静态名称。

chunkFilename: string

此选项决定了非入口(non-entry) chunk文件的名称。

上面就是关于filename和chunkFilename的官文解释。

首先什么是入口?

目前可以理解为entry字段就是提供的应用的入口文件。(这个解释并不全面)

开始做出如下尝试:

目录结构:

nodule_modules/

dist/

src/

​ --index.js

​ --a.js

webpack.config.js

文件webpack.config.js

var path = require('path')module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, '../dist'),filename: '[name].[contenthash:6].js',chunkFilename: '[name].[contenthash:4].js'}
}

上面配置中,整个应用的入口就是文件/src/index.js。

文件src/index.js

import('./a.js')
console.log('index')

文件src/a.js

console.log('a')

在这里插入图片描述
打包后的结果可以看出来index.js对应的main.conenthash.js是6位的,a.js对应的1.contenthash.js是4位的。

这和我们预想的结果一样,filename设置的是入口文件的文件名,chunkFilename设置的是非入口文件的文件名。动态加载的文件a.js并不是入口文件。

我们知道webpack打包的文件分为三大模块,一个是第三方库,这部分比较稳定,可以打包到一起,利于缓存。一个是业务代码,基本上每次发版都会修改。最后一个是webpack生成的runtime和manifest,每次打包都会改变。

现在我们的代码中只涉及到了自己的业务代码,并没有第三方库代码,即使这样我们也可以分离出webpack生成runtime和manifest。

修改配置如下:

var path = require('path')module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, '../dist'),filename: '[name].[contenthash:6].js',chunkFilename: '[name].[contenthash:4].js'},optimization: {runtimeChunk: {name: 'manifest'}}
}

在这里插入图片描述

可以看到entry对应生成的文件main.js文件的hash变成了4位,但是entry明明就是规定的是应用的入口文件,对应的文件名配置应该是filename,对应的hash位数应该是6位。

但现实它就是4位的。

并且还能看出来新分离出来的manifest.js的hash是6位的。

这其实也说明了webpack打包的应用本质上的入口并不是entry字段提供的文件,应用的入口是webpack自己生成的runtime。是通过runtime + manifest才将我们的代码和第三方库组织起来并且正常运行的。

所以webpack打包的应用入口是自己生成的runtime + manifest。

没有提取manifest的时候entry生成对应的main.js的hash位数是正确的。这其实只是一个巧合,因为这个情况下整个引用的入口就是main.js,因为manifest + runtime并没有从main,js中分离出来。所以入口文件对应的就是main.js,然后filename的设置是正确应用在了main.js上。

从上面的分析中可以推倒出,如果我们把manifest + runtime内联到HTML文件中,那么将不会有6位hash的文件被生成,因为并没有入口的js文件被生成。修改配置文件如下:

var path = require('path')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')module.exports = {mode: "development",entry: './src/index.js',output: {path: path.resolve(__dirname, './dist'),filename: '[name].[contenthash:6].js',chunkFilename: '[name].[contenthash:4].js'},optimization: {runtimeChunk: {name: "manifest",},},plugins: [new HtmlWebpackPlugin({template: './src/index.html'}),new ScriptExtHtmlWebpackPlugin({inline: /manifest..*.js$/})]
}

在这里插入图片描述
从上图中可以看到确实没有6位hash的文件被生成了。

总结:

output.filename规定的是应用入口文件的名称,而output.entry提供的是webpack打包的入口。某种情况下这两个入口是统一的。

通过webpack打包后的应用入口是webpack生成的manifest + runtime。当没有分离manifest + runtime的时候,这部分生成的内容会和entry字段提供的文件相同。

参考

  1. 输出(output)
  2. manifest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OP AMP - 反馈理论在运放中的应用

实际应用的系统绝大多数是闭环的,运放更是如此。 关于反馈理论,需要了解极点,零点,波特图,以及如何用相位裕度,幅值裕度 确定系统的稳定性,这里不作赘述 ,不懂的部分可以到网上搜点…

阅读react-redux源码 - 零

阅读react-redux源码 - 零阅读react-redux源码 - 一阅读react-redux源码(二) - createConnect、match函数的实现 react的技术栈一定会遇到redux,而在react中使用redux需要使用react-redux,那么react-redux是怎么包装redux已适用react的呢? …

CORS(跨域资源共享)

CORS(跨域资源共享)使用额外的HTTP头部来告诉浏览器,允许运行在origin(domain)上的Web应用访问来自不同源服务器上的指定资源。 浏览器访问一个web应用,这个web应用会发很多的跨域请求,例如加载不同源的JS/CSS脚本&am…

[转]jQuery设计思想

转自:http://kb.cnblogs.com/page/109875/ jQuery是目前使用最广泛的javascript函数库。 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQuery作为他们的官方库。 对于网页开发者来说&#xff…

敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)...

这是敏捷开发绩效管理的第四篇。(之一,之二,之三,之四,之五,之六,之七)最近在看德鲁克的书,发现其中很明确地写着“企业的绩效只存在于外部,而企业内部只有成…

【K8S in Action】服务:让客户端发现pod 并与之通信(2)

一 通过Ingress暴露服务 Ingress (名词) 一一进入或进入的行为;进入的权利;进入的手段或地点;入口。一个重要的原因是每个 LoadBalancer 服务都需要自己的负载均衡器, 以及 独有的公有 IP 地址, 而 Ingres…

一个罐子统治一切:Apache TomEE + Shrinkwrap == JavaEE引导

警告:我不是Spring Boot的专家。 我发现很多事情对此非常有趣,并且当然可以真正改善您的日常工作。 而且,我对Spring Boot没有任何反对,也没有开发或使用它的人。 但是我认为社区高估了该产品。 一年前,我开始收到很多…

iview-admin框架运行步骤

第一步: 前往github下载整个iview-admin框架的全部源码 github地址: https://github.com/iview/iview-admin 第二步: 点击Clone or download绿色按钮。下载整个压缩包 第三步: 解压至D盘,在根目录中按 1、前往github下…

.net 垃圾回收学习[How To: Use CLR Profiler][翻译学习]【2】

http://msdn.microsoft.com/zh-cn/library/ms979205 注意:内容可能已经过期了。 注意:CLR Profiler最新版本:http://www.microsoft.com/download/en/details.aspx?id16273 Identifying Common Garbage Collection Issues 可以使用CLR Profil…

JavaOne 2014:会议与合同利益冲突

杜克街咖啡馆,工程师可以在街上进行走廊交谈 。 与签约不兼容 我的第11届JavaOne会议(2004年至2014年为11 10 1)非常出色。 值得参加此活动并结识社区中所有参与的人。 现在,这里是绅士的,但 。 除了经济上的明显优…

JQuery(三)-- AJAX的深入理解以及JQuery的使用

HTTP HTTP http: 超文本传输协议。特点: 简单、快速、灵活、无状态、无连接 URL: 统一资源定位符。 组成:协议名://主机IP:端口号/项目资源地址?传递参数的键值对#锚点 ①ip地址在同一个网段是唯一的。如果是在公…

JSF的工作方式和调试方式–可以使用polyglot吗?

JSF不是我们通常认为的那样。 这也是一个调试起来可能有些棘手的框架,尤其是在初次遇到时。 在这篇文章中,让我们继续探讨为什么会出现这种情况,并提供一些JSF调试技术。 我们将讨论以下主题: JSF不是我们经常想到的 JSF调试的难…

React组件实现越级传递属性

如果有这样一个结构:三级嵌套,分别是:一级父组件、二级子组件、三级孙子组件,且前者包含后者,结构如图: 如果把一个属性,比如color,从一级传递给三级,一般做法是使用prop…

尝试Office 2003 VSTO的开发、部署

背景:一年前,某项目需要使用到Excel进行数据录入,考虑到很多用户还是使用XPOffice 2003,所以开发的时候直接使用Excel 2003版本进行VBA开发。也许很多人都会说,Win10都出了,微软的Office都要免费了&#xf…

初级开发人员在编写单元测试时常犯的错误

自从我编写第一个单元测试以来已经有10年了。 从那时起,我不记得我已经编写了成千上万的单元测试。 老实说,我在源代码和测试代码之间没有任何区别。 对我来说是同一回事。 测试代码是源代码的一部分。 在过去的3-4年中,我与多个开发团队合作…

OpenDaylight开发hello-world项目之开发工具安装

OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码框架搭建 在ODL开发之前,要安装好开发环境。ODL使用java语言开发,所以要安装好java。ODL的代码框架是有maven这个…

Google Chrome 扩展程序开发

根据公司的规定,每月八小时,弹性工作制。所以大家平时来的不太准时,如果有事,下班也就早些回去了。所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样…

[Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现

本文说说ViewModel的这个INotifyPropertyChanged接口可以用来做啥? 举例1:我有个TabControl,里面放了很多View,每个由ViewModel控制,我想是想TabSelectionChanged就打开相应的ViewModel,怎么做?…

[读书笔记]TCP/IP详解V1读书笔记-4 5

IP地址与以太网地址之间的关系 R P发送一份称作A R P请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,在32 bit的I P地址和采用不同网络技术的硬件地址之间提供动态映射 ----------------------------------------- arp以太网帧的类型字段为x 0 8 0 6&am…

未来是Apache Karaf上的微服务架构

这是Jamie Goodyear的客座博客文章( 博客 , icbts )。 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析师; 他为全球大型组织设计,批判和支持了体系结构。 他拥有纽芬兰纪念大学的计…