webpack学习笔记-2-file-loader 和 url-loader

摘要:
url加载器将对导入的图像进行编码并生成一个dataURL。因此,url加载器提供了一个限制参数。小于限制字节的文件将转换为DataURls。大于限制的文件也将使用文件加载器进行复制。简而言之,url加载器封装了文件加载器。url加载器不依赖于文件加载器。也就是说,当使用url加载器时,您只需要安装url加载器。您不需要安装文件加载器,因为url加载器具有内置的文件加载器。加载器的参数用于在处理文件时自定义加载器的工作特性。以url加载器为例,介绍webpack加载器中的参数。此外,url加载器还有一些文件加载器的参数。文件加载器与name、outputPath和publicPath相关。

1.前言

    如果我们希望在页面引入图片(包括img的src和background的url)。当我们基于webpack进行开发时,引入图片会遇到一些问题。

    其中一个就是引用路径的问题。拿background样式用url引入背景图来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件。

    另外,如果图片较多,会发很多http请求,会降低页面性能。这个问题可以通过url-loader解决。url-loader会将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURl,大于limit的还会使用file-loader进行copy。

    url-loader和file-loader是什么关系呢?简答地说,url-loader封装了file-loader。url-loader不依赖于file-loader,即使用url-loader时,只需要安装url-loader即可,不需要安装file-loader,因为url-loader内置了file-loader。通过上面的介绍,我们可以看到,url-loader工作分两种情况:1.文件大小小于limit参数,url-loader将会把文件转为DataURL;2.文件大小大于limit,url-loader会调用file-loader进行处理,参数也会直接传给file-loader。因此我们只需要安装url-loader即可。

    推荐文档:

    file-loader: https://github.com/webpack-contrib/file-loader

    url-loader: http://www.cnblogs.com/ghost-xyx/p/5812902.html

2.loader中的参数

    上面提到url-loader的参数和file-loader的参数,那么loader的参数是个什么概念呢?loader的参数用来自定义loader处理文件时的工作特性。下面以url-loader为例,介绍一下webpack的loader中的参数。

    首先看下面的例子:

 1 module.exports = {
 2     // 入口文件路径,__dirname是根目录
 3     entry: __dirname + '/src/main.js',
 4     // 打包生成文件
 5     output: {
 6         path: __dirname + '/output',
 7         filename: 'main.js'
 8     },
 9  
10     module: {
11         rules: [
12             {
13                 test: /.css$/,
14                 use: ['style-loader', 'css-loader']
15             },
16             {
17                 test: /.jpeg$/,
18                 use: [
19                     {
20                         loader: 'url-loader',
21                         options: {
22                             limit: '1024'
23                         }
24                     },
25                 ]
26             }
27         ]
28     }
29 }

    其中,url-loader的配置中的options属性表示的就是url-loader的参数,还有一种等价的写法:

1 {
2     test: /.jpeg$/,
3     use: 'url-loader?limit=1024
4 }

    如果有多个参数,就用 ‘&’ 连接起来。和http请求中的参数类似。正如前面介绍的,limit这个参数就是告诉url-loader,在文件小于多少个字节时,将文件编码并返回DataURL。此外url-loader还有一些用于file-loader的参数。我们知道,file-loader的作用是将文件复制到其他目录。file-loader提供了一系列参数允许我们自定义诸如输出文件、文件名规则、发布路径等特性的参数。下面介绍一下这些参数。
3.url-loader的参数

    先看下配置好的代码:

 1 module.exports = {
 2     // 入口文件路径,__dirname是根目录
 3     entry: __dirname + '/src/main.js',
 4     // 打包生成文件
 5     output: {
 6         path: __dirname + '/output',
 7         filename: 'main.js'
 8     },
 9  
10     module: {
11         rules: [
12             {
13                 test: /.css$/,
14                 use: ['style-loader', 'css-loader']
15             },
16             {
17                 test: /.jpeg$/,
18                 use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=output/',
19             }
20         ]
21     }
22 }

    这里涉及到了4个参数:limit、name、outputPath、publicPath。其中limit已经说明过。file-loader相关的是name、outputPath和publicPath。下面解释一下这3个参数
    name表示输出的文件名规则,如果不添加这个参数,输出的就是默认值:文件哈希。加上[path]表示输出文件的相对路径与当前文件相对路径相同,加上[name].[ext]则表示输出文件的名字和扩展名与当前相同。加上[path]这个参数后,打包后文件中引用文件的路径也会加上这个相对路径。

    outputPath表示输出文件路径前缀。图片经过url-loader打包都会打包到指定的输出文件夹下。但是我们可以指定图片在输出文件夹下的路径。比如outputPath=img/,图片被打包时,就会在输出文件夹下新建(如果没有)一个名为img的文件夹,把图片放到里面。

    publicPath表示打包文件中引用文件的路径前缀,如果你的图片存放在CDN上,那么你上线时可以加上这个参数,值为CDN地址,这样就可以让项目上线后的资源引用路径指向CDN了。

4.安装url-loader

npm install --save-dev url-loader 

5.demo
https://github.com/KIDFUCKER/webpack-demo.git

免责声明:文章转载自《webpack学习笔记-2-file-loader 和 url-loader》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据库系列(五)之 mysql的伸缩性dp--区间dp下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

查询安装webpack4.0是否成功时提示无法找到的解决方法

      最近使用webpack -v 查询webpack版本时提示无法找到             然后我试着重新全局安装webpack,提示还需要安装webpack-cli       选择yes后虽能成功安装webpack-cli,但会报错,提示找不到该模块        package.json也显示安装了webpack-cli         ...

vue-cli3.0和element-ui及axios的安装使用

一、利用vue-cli3快速搭建vue项目 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create 、vue serve 、vue ui 等命令) CLI 服务:@vue/cli-service是一个开发环境依赖。构建于 web...

webpack4.0打包失败的探索

①:运行命令npx webpack index.js 打包index.js文件失败,如下图提示 度娘说是因为没有设置webpack为生产或开发模式,于是我在package.json文件中添加如下代码 "scripts": { "dev":"webpack –-mode development", "build": "webpack –-...

使用webpack搭建vue开发环境

最近几天项目上使用了vue.js作为一个主要的开发框架,并且为了发布的方便搭配了webpack一起使用。CSS框架使用的是vue-strap(vue 对bootstrap控件做了封装)这篇文章主要总结一下具体搭建的过程,和途中遇到的一些问题的解决办法 主要用到的工具 Vue webpack vue-strap vue-router 搭建步骤 1. 首先...

vue项目中生产环境禁用debugger,关闭console

vue-cli2.0中的方法 1.安装uglifyjs-webpack-plugin插件 npm install uglifyjs-webpack-plugin --save-dev 2.修改wenbpack.prod.config.js配置文件 const UglifyJsPlugin = require('uglifyjs-webpack-plugi...

Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架

开发四年只会写业务代码,分布式高并发都不会还做程序员?   Nest.js 6.0.0 正式版发布了。Nest 是构建高效、可扩展的 Node.js Web 应用程序的框架。它使用现代的 JavaScript 或 TypeScript(保留与纯 JavaScript 的兼容性),并结合 OOP(面向对象编程),FP(函数式编程)和 FRP(函数响应式编程...