手把手教你webpack3(9)File-Loader配置简述

简介:

FILE-LOADER配置简述

前注:

文档全文请查看 根目录的文档说明

如果可以,请给本项目加【Star】和【Fork】持续关注。

有疑义请点击这里,发【Issues】。

DEMO地址

1、概述

简单来说,file-loader 就是将文件(由于一般是图片文件为主,所以下面通常使用图片两字作为替代,方便理解。其他的包括字体文件等),在进行一些处理后(主要是处理文件名和路径),移动打包后的目录中。

处理的内容包括:

  1. 文件名的处理,比如加 [hash]
  2. 路径的处理,比如【把图片文件统一放到img文件夹中】;

优点:

相较于 url-loader 可以将图片转为base64字符串,file-loader 在功能上更加强大一些;

缺点:

实际开发中,将一定大小以下的图片转为 base64字符串,有利于加载速度的提升。

2、配置

2.1、name

名称 类型 默认值 描述
name {String|Function} [hash].[ext] 为你的文件配置自定义文件名模板

简单的来说,这个就是规定,如何命名打包后的文件夹的文件名的。

默认值表示:命名是 哈希值 + 扩展名 的形式。

常见命名方式是:img/[hash].[ext],即将所有的图片(准确的说,是被file-loader处理的文件),都打包到 img 文件夹下。

几点:

  1. [hash:6]可以控制 hash 值的长度,6 表示长度为6,默认是 32;
  2. [ext] 表示是原文件的扩展名,应该没人会想改这个吧?
  3. [path] 不好用一句话概括。举个例子,图片在 /src/logo.png,打包后文件夹是 dist,配置为 '[path][name].[ext]',那么图片最终为:/dist/src/logo.png。实际上是相对于context的路径,context默认是webpack.config.js 的路径;
  4. [name] 表示原文件的文件名(不含后缀名)。例如 logo.png 就是指 logo,但一般不推荐用这个,或者就算用这个,也要加上 [hash],不然不同文件夹有同名文件就出问题了;
  5. [hash] 的全部实际为:[<hashType>:hash:<digestType>:<length>],中间用冒号连接,除了 hash 都可以省略,通常使用默认的就行了,顶多带个长度来限制文件名长度。

2.2、context

名称 类型 默认值 描述
context {String} this.options.context 配置自定义文件 context,默认为 webpack.config.js context

简单暴力的说,影响 name 中的 [path]

举例:

  1. 根目录文件夹名为:file_loader
  2. 图片路径:src/logo.png
  3. 打包文件夹是:dist
  4. 配置为:context: __dirname + '/../'name: '[path][name].[ext]'
  5. 打包结果:dist/file_loader/src/logo.png

2.3、publicPath

名称 类型 默认值 描述
publicPath {String|Function} __webpack_public_path__ 为你的文件配置自定义 public 发布目录

publicPath 这个一般会用webpack本身配置的,和那个效果也一样,但假如你想单独配置,就用这个。

举例:

  1. 假如,你计划把图片打包到放到CDN,我随便举个例子:https://www.abc.com/img这个目录下;
  2. 由于 CDN 和你本地服务器的网址肯定不同,所以你显然是需要通过绝对路径来加载这个图片的;
  3. 假如,图片名字为:logo.png(为了方便理解,我不加[hash]),那么预期图片的 url 为:https://www.abc.com/img/logo.png
  4. 那么,你这样配置就可以了:publicPath: 'https://www.abc.cn/img/'name: '[name].[ext]'
  5. 于是,图片被打包到img文件夹下,加载该图片的链接是:https://www.abc.cn/img/logo.png
  6. 最后,你把img文件夹整个丢到 CDN 上,就ok啦;

2.4、outputPath

名称 类型 默认值 描述
outputPath {String|Function} 'undefined' 为你的文件配置自定义 output 输出目录

这个就更简单了,就是相当于在name之前加了一个文件夹路径;

示例代码:

name: '[name].[ext]',   // 文件名,这个是将图片放在打包后的img文件夹中
publicPath: 'https://www.abc.cn/img/',
outputPath: 'myImage/'    // 这里记得后面要加一个斜杠

图片路径为:src/logo.png,打包后引用该图片的 url 变为:https://www.abc.cn/img/myImage/logo.png

效果和以下配置是一样的:

name: 'myImage/[name].[ext]',   // 文件名,这个是将图片放在打包后的img文件夹中
publicPath: 'https://www.abc.cn/img/',

但优点在于,这个属性可以配为函数,因为是函数,所以就可以判断环境,然后返回不同的值;

当然,name 也可以实现(写成一个函数的返回值,例如 name: getName()),但毕竟不好看,对吧;

注:

1、如果要写成函数,应该写成如下形式:

outputPath: function (fileName) {
    return 'myImage/' + fileName    // 后面要拼上这个 fileName 才行
}

2.5、useRelativePath

名称 类型 默认值 描述
useRelativePath {Boolean} false 如果你希望为每个文件生成一个相对 url 的 context 时,应该将其设置为 true

一般不启用这个。

至于效果,简单来说,当这个开关打开时:

  1. 首先会获取源代码中,图片文件,相对于css文件的路径关系;
  2. 然后打包后,css 代码通常会被打包到 js 文件中,于是根据之前所获取的【路径关系】,来保存打包好的图片文件;

举例来说:

  1. 图片路径:src/img/logo.png
  2. css 路径:src/style/style.css
  3. useRelativePath 设为 true;
  4. css被打包到js后,js的文件路径:dist/dist.js
  5. 打包后的图片路径:img/logo.png
  6. 原因是图片相对于css的路径关系是:css文件的上级目录的img文件夹中命名为logo.png;

2.6、emitFile

名称 类型 默认值 描述
emitFile {Boolean} true 默认情况下会生成文件,可以通过将此项设置为 false 来禁止(例如,使用了服务端的 packages)

简单粗暴的说,这个设置为 false 后,除了图片不会被打包出来,其他都按正常的来。

目录
相关文章
|
16天前
|
JavaScript
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
这篇文章是关于如何在webpack环境中配置Vue.js,包括安装Vue.js、解决报错、理解el与template的区别、使用SPA模式、抽离模板为对象、封装为单独的js文件、安装vue-loader时遇到的问题及解决方案,以及整个过程的总结。
55 2
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
|
11天前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
38 1
|
11天前
|
前端开发 JavaScript
Webpack 中多个 Loader 的配置
【10月更文挑战第12天】使用多个 Loader 进行配置是 Webpack 中常见的操作,可以实现对各种资源的精细处理和优化。在配置时,需要根据具体需求合理选择和排列 Loader,并注意它们之间的顺序和交互关系。同时,不断了解和掌握新的 Loader 以及它们的特性,有助于更好地发挥 Webpack 的强大功能,提升项目的开发效率和质量。通过深入理解和熟练运用多个 Loader 的配置方法,你将能够更加灵活地处理各种资源,满足项目的多样化需求。
27 2
|
2月前
|
前端开发 JavaScript Shell
「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系
该文章系统地总结了Webpack从基础配置到高级配置的16个关键知识点,包括Loader与Plugin的工作机制、源代码映射(Source Map)的使用、模块划分策略、性能优化技巧等内容,并提供了实际配置示例帮助理解和应用。
「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系
|
2月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
59 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
|
16天前
|
移动开发 JavaScript 前端开发
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
这篇文章主要介绍了如何通过配置Webpack的插件,如HtmlWebpackPlugin、uglifyjs-webpack-plugin和webpack-dev-server,来简化前端开发流程。
27 0
webpack学习四:使用webpack配置plugin,来使用HtmlWebpackPlugin、uglifyjs-webpack-plugin、webpack-dev-server等插件简化开发
|
2月前
|
缓存 资源调度 JavaScript
万字总结webpack实战案例配置
该文章总结了Webpack在实际项目中的配置案例,包括如何配置多页面应用、使用高级插件、优化构建速度及减少输出文件大小等方面的实战经验。
|
2月前
|
前端开发
umi webpack配置图片资源转base64
umi webpack配置图片资源转base64
|
3月前
|
前端开发 JavaScript 开发者
Angular与Webpack协同优化:打造生产级别的打包配置——详解从基础设置到高级代码拆分和插件使用
【8月更文挑战第31天】在现代前端开发中,优化应用性能和加载时间至关重要,尤其是对于使用Angular框架的项目。本文通过代码示例详细展示了如何配置Webpack,以实现生产级别的打包优化。从基础配置到生产环境设置、代码拆分,再到使用加载器与插件,每个步骤都旨在提升应用效率,确保快速加载和稳定运行。通过这些配置,开发者能更好地控制资源打包,充分发挥Webpack的强大功能。
52 0
|
3月前
|
JavaScript 测试技术
在不同 webpack 版本的 Vue 项目中配置 Storybook
在不同 webpack 版本的 Vue 项目中配置 Storybook