了解webpack请移步webpack初识!

什么是loader

loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用loader来告诉webpack去加载一个coffeescript或者jsx

loader 特性

  • loaders可以串联,他们应用于管道资源,最后的loader将返回javascript,其它的可返回任意格式(传递给下一个loader)
  • loaders 可以同步也可以异步
  • loaders在nodejs下运行并且可以做一切可能的事
  • loader接受参数,可用于配置里
  • loaders可以绑定到extension/RegExps 配置
  • loaders 可以通过npm发布和安装
  • 正常的模块儿可以到处一个loader除了
  • loaders 可以访问配置
  • 插件可以给loaders更多的特性
  • loaders可以释放任意额外的文件

如果你对loader的例子感兴趣可以去看下现有的loader列表

解析loaders

loaders的解析类似模块儿,一个loader模块会导出一个方法并且可被nodejs写为可兼容的javascript,通常情况下通过npm来管理loaders,但你也可以把loader放在自己的应用里

引用loaders

按照惯例,虽然不是必须的,但loaders通常被命名为XXX-loader, XXX是上下文名称,比如json-loader.

你可能引用loaders通过完整的(真实的)名字例如(json-loader)或者通过他的速记名(.json)

loader的名称约定和优先级搜索是通过webpack内置api esolveLoader.moduleTemplates所定义

loader的名称约定很有用处,特别是当你通过require()声明来引用的时候,下面会讲到用法

安装loaders

如果这个loader可以在npm上安装,你可以安装这个loader通过

$ npm install xxx-loader --save

或者

$ npm install xxx-loader --save-dev

用法

有很多种方法在你的app中使用loaders

  • 明确的require声明(在想要试用的js文件夹里直接加载)
  • 通过配置文件配置
  • 通过CLI配置

require

提示:如果可以的话尽量不要使用require ,如果你想让你的脚本可运行在服务端和客户端(nodejs和浏览器)使用约定配置文件来配置

通过require声明(define,require.ensure,等等)来加载指定的loaders ,使用!来分割资源loaders,每一部分会被解析到当前的文件

可以在配置文件里通过加!前缀这种规则重写任意的loader

require("./loader!./dir/file.txt");

require("jade!./template.jade");

require("!style!css!less!bootstrap/less/bootstrap.less");

配置文件

你可以通过正则在配置文件里绑定loaders

{
module: {
loaders: [
{ test: /\.jade$/, loader: "jade" },
// => "jade" loader 用于.jade文件 { test: /\.css$/, loader: "style!css" },
// => "style" 和 "css" loader 用于 ".css" 文件
//另一种语法
{ test: /\.css$/, loaders: ["style", "css"] },
]
}
}

CLI(命令行界面)

CLI

可以通过命令行来绑定加载器

$ webpack --module-bind jade --module-bind 'css=style!css'
// 使用loader'jade'来加载'.jade'的文件 ,使用loaders 'style'和'css'加载'.css'文件

查询参数

loader可以使用查询参数通过字符串(像web上的一样)查询字符串被插在?后面例如url-loader?mimetype=image/png.

提示:查询参数的格式由loader决定,查看loader格式文档大多数的loaders接受如下格式的参数形式(?key=value&key2=value2)和JSON 对象格式 (?{"key":"value","key2":"value2"}).

require里

require("url-loader?mimetype=image/png!./file.png");

配置文件里

{ test: /\.png$/, loader: "url-loader?mimetype=image/png" }

或者

{
test: /\.png$/,
loader: "url-loader",
query: { mimetype: "image/png" }
}

CLI方式

webpack --module-bind "png=url-loader?mimetype=image/png"

个人理解

以上文段皆翻译自webpack官网若有错误请指正,接下来说下个人对loader的理解,我觉得loader是一个很于意思的功能,webpack其实运行在node下的一个编译站,她可以将各种个样的文件打包起来,包括图片呀,css呀,视频呀,但无论怎么打包最后导出的都是javascrit,但是我们最终被客户端拉出的页面需要css的渲染 需要图片的路径,而loader她可以把各种各样的资源文件进行转变编译,最后用正确的格式加载到浏览器中,比如css被转换为style插入到页面,图片被转换为base64格式

使用webpack loader加载器的更多相关文章

  1. webpack loader加载器

    配置loader,通过加载器处理文件,例如css sass less等,告诉webpack每一种文件都需要使用什么来加载器来处理. 1.node.js安装好之后也会自动默认安装好npm,所以cmd c ...

  2. Loader加载器

    今天学到了这个Loader,浅谈一下自己的看法: 1.定义 Loader是一个加载器,可以用来它访问数据,可以看做访问数据的机器(好比挖掘机).装再器从android3.0开始引进,它使得在activ ...

  3. webpack常用加载器和插件

    css文件加载器: style-loader,css-loader,sass-loader,less-loader //style和css加载器必须放在一起使用,且style必须放前面(style!c ...

  4. Webpack模块加载器

    一.介绍 Webpack是德国开发者 Tobias Koppers 开发的模块加载器,它能把所有的资源文件(JS.JSX.CSS.CoffeeScript.Less.Sass.Image等)都作为模块 ...

  5. Webpack的加载器

    一.什么是加载器(loaders)loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用load ...

  6. 恶意软件开发——编写第一个Loader加载器

    一.什么是shellcode loader? 上一篇文章说了,我们说到了什么是shellcode,为了使我们的shellcode加载到内存并执行,我们需要shellcode加载器,也就是我们的shel ...

  7. webpack配置常用loader加载器

    webapck中使用loader的方法有三种 使用loader之前必须运行安装 : npm install --save-dev xxx-loader (1)通过CLI : 命令行中运行 webpac ...

  8. Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件

    Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...

  9. AMD加载器实现笔记(三)

    上一篇文章中我们为config添加了baseUrl和packages的支持,那么这篇文章中将会看到对shim与paths的支持. 要添加shim与paths,第一要务当然是了解他们的语义与用法.先来看 ...

随机推荐

  1. MVC控制器中动作方法返回的结果

    在MVC控制器中主要的返回方式有如下几种: 1.Content(): 返回文本类型的ContentResult,比如“这是我做的一个MVC”. 2.File(): 返回文件类型的内容FileResul ...

  2. (C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据

    SQLite插入数据效率最快的方式就是:开启事务  +   insert语句  +  关闭事务(提交) 利用事务的互斥性,如果在批量的插入操作前显式地开启一次事务,在插入操作结束后,提交事务,那么所有 ...

  3. 原生 javaScript 百叶窗 效果的实现及原理介绍

    百叶窗大家都见过吧!如图: 原理: 如图所示,空心格子就好比是每个li,给它设定相对定位属性,设置overflow:hidden: 黑块为li子元素,高度为li的2倍,设置absolute属性,我们正 ...

  4. web思维导图(前期)

  5. Java io流完成复制粘贴功能

    JAVA 中io字节输入输出流 完成复制粘贴功能: public static void main(String[] args) throws Exception{        // 创建输入流要读 ...

  6. lamp-linux3

    LAMP编程之Linux(3) 一.权限管理 1.权限介绍(重点) 在Linux中分别有读.写.执行权限: 读权限: 对于文件夹来说,读权限影响用户是否能够列出目录结构 对于文件来说,读权限影响用户是 ...

  7. GraphQL 如何取代 Redux

    简评:使用 GraphQL 可以大大简化客户端状态管理部分的代码. ⚛️切换到React 故事背景:在 2016 年,Pathwright 的前端团队就开始将客户端的代码从 Backbone & ...

  8. J2SE基本安装和java的环境变量

    J2SE基本安装和java的环境变量   1. 首先登录http://www.oracle.com,下载JDK(J2SE) JDK有很多版本其中JDK 1.0,1.1,1.2,1.3,1.4 1.5 ...

  9. python3的全局变量和局部变量

    局部变量 定义在函数体内部的变量称为局部变量 函数的形参也是局部变量 局部变量的作用范围只在声明该局部变量的函数体内 局部变量在函数调用时被创建,在函数调用完成后自动销毁 全局变量 定义在函数体外,模 ...

  10. 2016级算法期末模拟练习赛-B.AlvinZH的青春记忆I

    1083 AlvinZH的青春记忆I 思路 中等题,动态规划. 简化题意,一个环上取数,数不可相邻,取取得数之和最大值. 环不好表示,可以解开变成一列数,那么答案应为下列两种情况较大者. ①:取第一个 ...