资讯专栏INFORMATION COLUMN

webpack系列之loader的基本使用

xiaoxiaozi / 2364人阅读

摘要:由于本篇我们只讲的基本使用,故这里不再深入讲解,有兴趣的可以点击这里学习。使用的方式有三种使用方式,如下配置推荐在文件中指定。下一篇会给大家介绍系列之及简单的使用

欢迎大家访问我的github blog查看更多文章

webpack系列之loader及简单的使用 一. loader有什么用

</>复制代码

  1. webpack本身只能打包Javascript文件,对于其他资源例如 css,图片,或者其他的语法集比如jsx,是没有办法加载的。 这就需要对应的loader将资源转化,加载进来。

比如
你的工程中,样式文件都使用了less语法,是不能被浏览器识别的,这时候我们就需要使用对应的loader,来把less语法转换成浏览器可以识别的css语法。

例如一个简单的less文件:
转换前:

</>复制代码

  1. .demo {
  2. width: 200px;
  3. height: 100px;
  4. margin: auto;
  5. border: 1px solid;
  6. p {
  7. font-weight:bold;
  8. padding-left: 30px;
  9. }
  10. }

转换后:

</>复制代码

  1. .demo {
  2. width: 200px;
  3. height: 100px;
  4. margin: auto;
  5. border: 1px solid;
  6. }
  7. .demo p {
  8. font-weight: bold;
  9. padding-left: 30px;
  10. }

后面的案例也是拿这个less文件来做演示的。

二. loader是什么

先来看一下官方对loader的一个解释:

</>复制代码

  1. A loader is a node module exporting a function

翻译过来:loader就是一个export出来的function

既然是 node module,所以如果你自己要自定义一个loader,完全可以这么写:

</>复制代码

  1. module.exports = function (source) {
  2. // todo
  3. }

解释

其中source参数是这个loader 要处理的源文件的字符串

返回经过"翻译"后的webpack 能够处理的有效模块

如果你所写的 loader 需要依赖其他模块的话,那么同样以 module 的写法,将依赖放在文件的顶部引进来即可:

</>复制代码

  1. var fs = require("fs")
  2. module.exports = function (source) {
  3. // todo
  4. }

如果你希望将处理后的结果(不止一个)返回给下一个 loader,那么就需要调用 webpack 所提供的 API

由于本篇我们只讲loader的基本使用,故这里不再深入讲解,有兴趣的可以点击这里学习。

三. 使用loader

在看了前面的介绍后,接下来给大家介绍一下怎么使用loader

使用loader的方式

有三种使用方式,如下:

配置(推荐):在 webpack.config.js 文件中指定 loader

内联:在每个 import 语句中显式指定 loader

CLI:在 shell 命令中指定它们。

以上三种方式,我们在开发过程中推荐使用第一种方式:

比如你想使用webpack来打包样式文件,则可以在webpack.config.js里添加如下代码:

</>复制代码

  1. module: {
  2. rules: [
  3. {
  4. test: /.css$/, // 正则匹配所有.css后缀的样式文件
  5. use: ["style-loader", "css-loader"] // 使用这两个loader来加载样式文件
  6. }
  7. ]
  8. }

module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁。

上述rules的作用:
webpack在打包过程中,凡是遇到后缀为css的文件,就会使用style-loadercss-loader去加载这个文件。

四.案例

在对loader有了一个大概的认识后,来做一个小案例,需求如下:

</>复制代码

  1. 将上一篇(webpack系列之基本概念和使用)的demo输出文字居中并用黑框圈起来
目录结构

代码目录结构如下:
├── node_modules
├── app
│ ├── bundle.js
│ └── index.html
├── package-lock.json
├── package.json
├── src
│ ├── index.js
│ └── main.less
└── webpack.config.js

1. 安装loader

我们必须使用 loader 告诉 webpack 加载 less 文件,为此,需要首先安装相对应的 loader

</>复制代码

  1. npm install --save-dev less
  2. npm install --save-dev less-loader
  3. npm install --save-dev css-loader
  4. npm install --save-dev style-loader

这些loader的作用如下:

安装less-loader后可以在js中使用require的方式来加载less文件了;

安装css-loader后可以在js中加载css文件;

安装style-loader的目的是为了让加载的css作为style标签内容插入到html中。

2. 配置loader

webpack.config.js代码如下:

</>复制代码

  1. module.exports = {
  2. devtool: "eval-source-map",
  3. entry: __dirname + "/src/index.js", //入口文件
  4. output: {
  5. path: __dirname + "/app", //打包后的文件存放的地方
  6. filename: "bundle.js" //打包后输出文件的文件名
  7. },
  8. module: {
  9. rules: [
  10. {
  11. test: /.less$/,
  12. use: ["style-loader","css-loader", "less-loader"]
  13. }
  14. ]
  15. }
  16. }
3.新建样式文件

main.less代码如下:

</>复制代码

  1. .demo {
  2. width: 200px;
  3. height: 100px;
  4. margin: auto;
  5. border: 1px solid;
  6. p {
  7. font-weight:bold;
  8. padding-left: 30px;
  9. }
  10. }
4. 修改入口文件

在入口文件index.js里引入我们的样式文件

</>复制代码

  1. require ("./main.less");
  2. var element = document.createElement("div");
  3. element.className = "demo";
  4. var p = document.createElement("p");
  5. p.innerText = "webpack系列之loader的基本使用!";
  6. element.appendChild(p);
  7. document.body.appendChild(element);
5.打包

在项目根目录(webpack-demo)下执行打包命令:

</>复制代码

  1. ➜ webpack-demo webpack

打包成功,会输出如下:

</>复制代码

  1. Hash: 1bb51c6a348686a223db
  2. Version: webpack 3.10.0
  3. Time: 1077ms
  4. Asset Size Chunks Chunk Names
  5. bundle.js 53.8 kB 0 [emitted] main
  6. [0] ./src/index.js 273 bytes {0} [built]
  7. [2] ./src/main.less 1.19 kB {0} [built]
  8. [2] ./node_modules/css-loader!./node_modules/less-loader/dist/cjs.js!./src/main.less 304 bytes {0} [built]
6. 查看结果

在浏览器里刷新index.html
你会发现输出的文字被一个黑框给圈了起来,并且加粗显示,这就表明我们的样式文件已经生效了,而且从截图当中也可以看见样式文件也插入到了html中。

五.常用loader 样式

css-loader : 解析css文件中代码

style-loader : 将css模块作为样式导出到DOM

less-loader : 加载和转义less文件

sass-loader : 加载和转义sass/scss文件

脚本转换编译

script-loader : 在全局上下文中执行一次javascript文件,不需要解析

babel-loader : 加载ES6 代码后使用Babel转义为ES5后浏览器才能解析

Files文件

url-loader : 多数用于加载图片资源,超过文件大小显示则返回data URL

raw-loader : 加载文件原始内容(utf-8格式)

加载框架

vue-loader : 加载和转义vue组件

react-hot-loader : 动态刷新和转义react组件中修改的部分

六. 总结

本篇向大家介绍了loader有什么用,什么是loader,以及怎么使用loader这些基础知识,如果有兴趣想了解得更深入一些,可以看看怎么编写一个loader。
下一篇会给大家介绍:webpack系列之Plugin及简单的使用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94282.html

相关文章

  • webpack系列plugin及简单使用

    摘要:系列之及简单的使用一有什么用是核心功能,通过插件可以实现所不能完成的复杂功能,使用丰富的自定义,可以控制编译流程的每个环节,实现对的自定义功能扩展。三使用在配置文件中,向属性传入实例即可。 webpack系列之plugin及简单的使用 一.plugin有什么用 plugin是webpack核心功能,通过plugin(插件)webpack可以实现loader所不能完成的复杂功能,使用p...

    TesterHome 评论0 收藏0
  • React 和 ES6 工作流 Webpack使用(第六部分)

    摘要:在上面的列表中,是自解释型的。我们将使用后者。调整文件的内容到这一步,这个应用就具备热刷新的功能。下一步,更新文件中的到现在为止,如果你在控制台运行压缩文件将被创建并且放在路径下面。 这是React和ECMAScript2015系列文章的最后一篇,我们将继续探索React 和 Webpack的使用。 下面是所有系列文章章节的链接: React 、 ES6 - 介绍(第一部分) Rea...

    Mr_houzi 评论0 收藏0
  • React 和 ES6 工作流 Webpack使用(第六部分)

    摘要:在上面的列表中,是自解释型的。我们将使用后者。调整文件的内容到这一步,这个应用就具备热刷新的功能。下一步,更新文件中的到现在为止,如果你在控制台运行压缩文件将被创建并且放在路径下面。 这是React和ECMAScript2015系列文章的最后一篇,我们将继续探索React 和 Webpack的使用。 下面是所有系列文章章节的链接: React 、 ES6 - 介绍(第一部分) Rea...

    yunhao 评论0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件开发前端掘金作者原文地址译者插件是为应用添加全局功能的一种强大而且简单的方式。提供了与使用掌控异步前端掘金教你使用在行代码内优雅的实现文件分片断点续传。 Vue.js 插件开发 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins译者:jeneser Vue.js插件是为应用添加全局功能的一种强大而且简单的方式。插....

    izhuhaodev 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<