当前位置: 首页 > news >正文

webpack-loader

Loader

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。

因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。

loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。

loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!

 

示例

例如,你可以使用 loader 告诉 webpack 加载 CSS 文件,或者将 TypeScript 转为 JavaScript。为此,首先安装相对应的 loader:

//Install for one
npm install --save-dev css-loader npm install --save-dev ts-loader

//Install for two
npm i --save-dev css-loader ts-loader

//Install for three
npm i --save-dev css-loader && npm i --save-dev ts-loader

 

推荐你使用第二种方式安装,关于npm之类的命令简写,请访问npm文档,当然如果你英语不太好,可以用Chrome自带的Google翻译。

 

然后指示 webpack 对每个 .css 使用 css-loader,以及对所有 .ts 文件使用 ts-loader

webpack.config.js

module.exports = {
  module: {
    rules: [
      { test: /\.css$/, use: 'css-loader' },
      { test: /\.ts$/, use: 'ts-loader' }
    ]
  }
};

 

使用 Loader

在你的应用程序中,有三种使用 loader 的方式:

  • 配置(推荐):在 webpack.config.js 文件中指定 loader。
  • 内联:在每个 import 语句中显式指定 loader。
  • CLI:在 shell 命令中指定它们。

配置[Configuration]

module.rules 允许你在 webpack 配置中指定多个 loader。

这是展示 loader 的一种简明方式,并且有助于使代码变得简洁。

同时让你对各个 loader 有个全局概览:

  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  }

 

内联

可以在 import 语句或任何等效于 "import" 的方式中指定 loader。使用 ! 将资源中的 loader 分开。分开的每个部分都相对于当前目录解析。

import Styles from 'style-loader!css-loader?modules!./styles.css';

 

通过前置所有规则及使用 !,可以对应覆盖到配置中的任意 loader。

选项可以传递查询参数,例如 ?key=value&foo=bar,或者一个 JSON 对象,例如 ?{"key":"value","foo":"bar"}

尽可能使用 module.rules,因为这样可以减少源码中的代码量,并且可以在出错时,更快地调试和定位 loader 中的问题。

CLI

你也可以通过 CLI 使用 loader:

webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'

 

这会对 .jade 文件使用 jade-loader,对 .css 文件使用 style-loader 和 css-loader

Loader 特性

  • loader 支持链式传递。能够对资源使用流水线(pipeline)。一组链式的 loader 将按照相反的顺序执行。loader 链中的第一个 loader 返回值给下一个 loader。在最后一个 loader,返回 webpack 所预期的 JavaScript。
  • loader 可以是同步的,也可以是异步的。
  • loader 运行在 Node.js 中,并且能够执行任何可能的操作。
  • loader 接收查询参数。用于对 loader 传递配置。
  • loader 也能够使用 options 对象进行配置。
  • 除了使用 package.json 常见的 main 属性,还可以将普通的 npm 模块导出为 loader,做法是在 package.json 里定义一个 loader 字段。
  • 插件(plugin)可以为 loader 带来更多特性。
  • loader 能够产生额外的任意文件。

loader 通过(loader)预处理函数,为 JavaScript 生态系统提供了更多能力。 用户现在可以更加灵活地引入细粒度逻辑,例如压缩、打包、语言翻译和其他更多。

 

解析 Loader

loader 遵循标准的模块解析。

多数情况下,loader 将从模块路径(通常将模块路径认为是 npm installnode_modules)解析。

loader 模块需要导出为一个函数,并且使用 Node.js 兼容的 JavaScript 编写。

通常使用 npm 进行管理,但是也可以将自定义 loader 作为应用程序中的文件。

按照约定,loader 通常被命名为 xxx-loader(例如 json-loader)。

有关详细信息,请查看如何编写 loader?。

相关文章:

  • 算法学习之路|搬运家具(模拟)
  • Java电商项目面试题(五)
  • 流媒体之HLS——综述
  • 人工智能三年行动计划启动,推动人工智能和实体经济深度融合
  • MySQL数据库----IDE工具介绍及数据备份
  • 阿里云CodePipeline亮相,帮助用户实现持续集成与交付
  • 使用Photoshop+960 Grid System模板进行网页设计
  • div层次整理 / 自定义pycharm补全 / 注释 /keymap /tab
  • [译]Flutter for Android Developers - Async UI
  • 使用nexus搭建Maven私服
  • Py徐少攻关之初探 编码 语言分类 (2)
  • 从高大上航拍到接地气撒农药,大疆推出MG-1农业植保机
  • mongo中命令工作原理
  • 「镁客·请讲」黑晶VR徐强:VR教育先抓核心阵地,快速攻占学校
  • 标榜着“有情绪”的机器人们,真的有情绪吗?
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • git 常用命令
  • Linux CTF 逆向入门
  • oschina
  • php中curl和soap方式请求服务超时问题
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • springMvc学习笔记(2)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 安卓应用性能调试和优化经验分享
  • 诡异!React stopPropagation失灵
  • 两列自适应布局方案整理
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端面试题总结
  • 树莓派 - 使用须知
  • 数组的操作
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 问题之ssh中Host key verification failed的解决
  • 我从编程教室毕业
  • 学习HTTP相关知识笔记
  • FaaS 的简单实践
  • MPAndroidChart 教程:Y轴 YAxis
  • Prometheus VS InfluxDB
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 达梦数据库知识点
  • ${ }的特别功能
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (二)丶RabbitMQ的六大核心
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)vue-router+UI组件库
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)EXC_BREAKPOINT僵尸错误
  • .Net Winform开发笔记(一)
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示