Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Webpack4干货分享(二),使用loader处理scss,图片以及转换JS

Webpack4干货分享(二),使用loader处理scss,图片以及转换JS

作者头像
葡萄城控件
发布于 2018-09-27 09:40:41
发布于 2018-09-27 09:40:41
96010
代码可运行
举报
运行总次数:0
代码可运行

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://wanago.io/2018/07/16/webpack-4-course-part-two-webpack-4-course-part-two-loaders/

今天继续我们的Webpack 4入门教程。在介绍了Webpack的基本概念之后,是时候更深入一点了。这次我们会涉及Webpack中非常强大的一个东西:loader。首先,我们会学习如何使用那些可用的loader。它将包括如何处理css、scss、图片以及对老版本的JavaScript语言的转换。让我们开始吧!

Webpack 4 入门教程继续 - 什么是loaders?

之前的教程,我说Webpack是一个打包器。但这不是它仅有的目的。虽然Webpack天生只能理解JavaScript文件,但可以利用loader来改变这一点。除了能够处理多种类型的文件,Webpack还能修改它们。

添加loader

使用loader最好的方式是在webpack.config.js文件中指定它们。要这么做,你需要添加module.rules属性。

css-loader

css-loader能够翻译引入的css文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install css-loader

考虑如下的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: 'css-loader'
      }
    ]
  }
};

rules

rules 这个属性是一个数组,指明你的各个loader。它会作用于匹配到 test 属性所指定规则的每一个文件。这个规则,实际上,是一个正则表达式。

use

属性 use 指明需要对匹配的文件应用那个loader。

串联多个loader

有了上面的代码,你就能够在你的JavaScript代码中导入css文件了。(例如,使用之前我们提到的ES6模块

但这还不能让css真正生效。我们需要一种方法让浏览器能够使用这些css。这种情况下,style-loader就派上用场了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install style-loader

但那就意味着要对css文件使用两个loader。你可以通过串联多个loader(chaining loaders)来使它们都生效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  },
}

你可以看到,我们给了 use 属性一个数组。一个非常重要的注意点是,串联执行的顺序是反向的(译者注:也就是从右往左)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* style.css */
body {
  background-color:black;
}
// index.js
import './style.css'

使用上面的配置,打包的工作方式大概是:

  1. Webpack尝试解析 style.css 文件
  2. 文件名与正则表达式/\.css$/匹配
  3. 文件被 css-loader 编译
  4. css-loader 处理后的结果会被传到 style-loader
  5. 最后,style-loader 返回一串JavaScript代码

默认情况下,打包后的输出是./dist/bundle.js。现在,这个文件包含的代码会把所有的样式插入到<style>标签里面。如果你在HTML中引入了bundle.js的连接,在执行完脚本后,HTML会看起来像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Webpack App</title>
  <style type="text/css">body {
    background-color:black;
  }</style></head>
  <body>
    <script type="text/javascript" src="bundle.js"></script>
  </body>
</html>

sass-loader

有了这些知识,你可以轻松地给你的工程添加sass/scss支持了。你可以在这里使用 sass-loader

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install sass-loader

只需要在你的loader链里插入它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'sass-loader']
      }
    ]
  },
}

就是这样,现在你可以引入scss文件了!文件在被 css-loader 解析之前,会从scss转译成纯css。

(译者注: 如果安装完sass-loader后,本地运行Webpack出现了和node-sass相关的错误,可尝试再安装一个node-sass的包解决这个问题,即npm install node-sass

给loader传入选择项

实际上,loader可以接受一些选择项。让我们用 url-loader 为例来说明。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install url-loader file-loader
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader','sass-loader']
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 5000
            }
          }
        ]
      }
    ]
  }
};

注意,如果你想要给loader传入配置项,你不再是把loader以字符串形式给 use 属性。现在它是一个对象,包含两个属性: loader(即loader的名字),和 options

url-loader会把你的图片转换为base64格式的URI。如果你的图片文件很小,那么把它们直接引入到代码中会有更好的性能。这可以减少浏览器所发的请求数。但是,如果你的图片文件很大,那么把它们作为单独的文件引入可能会更好,因为浏览器可以并行加载它们。

这就是为什么 url-loader 有一个 limit 属性。它指明了一个文件大小(以byte为单位),当超过这个大小时,文件将不会被转为base64的URI。相比较而言,file-loader 仅仅是被用来拷贝你的文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
  background-image: url('./big-background.png');
}
.icon {
  background-image: url('./icon.png');
}

上面的配置会得到下面的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style type="text/css">body {
  background-image: url(ca3ebe0891c7823ff1e137d8eb5b4609.png); }

.icon {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAALElEQVR4AWMYIWAU1FPLoP9AXEFI0QEi8H+YYdQyqIEaXuumRhh1DZdUMwoATlYWfwh9eYkAAAAASUVORK5CYII=); }
</style>

因为big-background.png比限制的大小更大,它被拷贝至dist文件夹,并被起了一个随机的名字。而相反,icon.png文件被转换为了base64 URI。

使用babel转译JavaScript

另一个流行的loader是 babel-loader。它允许你使用Babel转译JavaScript文件。它解决了如何使用最新版本的JavaScript来编写代码的问题。如果你想支持老版本的浏览器,或者想使用现代浏览器还没有实现的功能,Babel都能够帮到你。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install babel-loader @babel/core @babel/preset-env

(译者注:原文的babel-core和babel-preset-env依赖被替换为@babel/core和@babel/preset-enve,因为新版本的Babel7中对官方提供的依赖使用了命名空间@babel)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  }
};

注意到,我们这里使用了 exclude 属性,它也是一个正则表达式。如果任何文件与这个表达式相匹配,它将不会被转译。

这里有很多预置项可以满足你的需求。查阅Babel的官方文档,你可以在那里找到它们的列表。

总结

这一次我们学习了Webpack很有用的一个功能:loader。我们介绍了一些可用的loader。利用它们,我们在项目中添加上了对scss的支持。此外,我们还学习如何使用 url-loader 处理图片。另外一个loader的常用之处是我们讨论的利用Babel转译JavaScript。在教程未来的部分,我们会深入到loader中,包括写一个我们自己的loader。

关于葡萄城:

赋能开发者!葡萄城公司成立于 1980 年,是全球领先的集开发工具、商业智能解决方案、管理系统设计工具于一身的软件和服务提供商。西安葡萄城是其在中国的分支机构,面向全球市场提供软件研发服务,并为中国企业的信息化提供国际先进的开发工具、软件和研发咨询服务。葡萄城的控件和软件产品在国内外屡获殊荣,在全球被数十万家企业、学校和政府机构广泛应用。​

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
可以,大佬,互粉一下
可以,大佬,互粉一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
医学图像分割 | U-Net网络及他的变体
今天来简单归纳一下,医学图像分割的内容,还有很多代表性的工作在之后的文章中不断更新,由于同一个网络结构可能在不同的数据集上表现出不一样的性能,在具体的任务场景中还是要结合数据集来选择合适的网络。
AI算法修炼营
2020/05/18
4.4K0
医学图像分割 | U-Net网络及他的变体
深度学习实战之医学图像分割
计算机视觉领域有三大问题:图像分类、目标检测以及图像分割。前两类问题及应用在公众号之前的文章里都有介绍,那么今天我们就来介绍剩下的图像分割问题,并以医学图像分割为例介绍它在现实中的应用。
用户1621951
2021/10/14
8.6K1
深度学习实战之医学图像分割
图像分割必备知识点 | Unet详解 理论+ 代码
语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。
机器学习炼丹术
2020/12/02
9.6K1
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
本文首发于 【集智书童】,白名单账号转载请自觉植入本公众号名片并注明来源,非白名单账号请先申请权限,违者必究。
集智书童公众号
2023/09/04
23.7K0
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
深度学习如何在医学影像分割上大显神通?——分割网络的三个改进思路
一、医学影像分割有助于临床工作 图像分割在影像学诊断中大有用处。自动分割能帮助医生确认病变肿瘤的大小,定量评价治疗前后的效果。除此之外,脏器和病灶的识别和甄别也是一项影像科医生的日常工作。CT和磁共振的数据都是三维数据,这意味着对器官和病灶的分割就需要逐层进行。如果都是手工分割的话,会给医生带来繁重的工作量。实际上,已经有很多学者提出了许多医学影像的分割方法,但由于医学影像复杂,分割目标多变,仍有很多自动分割问题等待解决。 近年来深度学习在计算机视觉的各个细分邻域都取得了出色的成绩,那么,深度学习如何帮助医
企鹅号小编
2018/01/25
9.9K0
医学图像半监督分割Baselines
近年来,CNN在医学图像分割领域取得了统治级的地位,nnUNet及其各种魔改版本几乎霸占了各大比赛的leaderboard,但大多医学图像分割任务一直因为标注数量太少而饱受诟病。目前大多研究集中于调整网络结构等方面(加各种attention,各种feature fusion),希望在有限的数据上拟合出更加性能强悍的模型,而较少的去利用未标注数据来训练更加鲁棒和泛化性更好的模型(在临床场景下海量的未标注原始数据被保留在数据中心中,医生没有时间和精力对其大规模标注,只有少量数据会被标注用于临床或算法研究)。如何缓解标注图像数量太少,未标注数量太多和有效利用未标注的原始数据等问题,已然成为了医学图像分割发展的主要矛盾。
Amusi
2020/11/11
1.6K0
医学图像半监督分割Baselines
【魔改UNet系列】Mamba-UNet: 医学图像分割的UNet类纯视觉Mamba
在医学图像分析的最新进展中,卷积神经网络(CNN)和视觉变换器(ViT)树立了重要的基准。前者通过其卷积操作擅长捕捉局部特征,后者通过自注意力机制实现了显著的全局上下文理解。然而,这两种架构在有效建模医学图像中的长距离依赖方面都存在局限性,这对于精确分割至关重要。受Mamba架构的启发,该架构以其在处理长序列和全局上下文信息方面的专业性而闻名,并且作为状态空间模型(SSM),我们提出了Mamba-UNet,这是一种新颖的架构,它将UNet在医学图像分割中的能力与Mamba的能力相结合。Mamba-UNet采用了基于纯视觉Mamba(VMamba)的编码器-解码器结构,并注入了跳跃连接以保留网络不同尺度上的空间信息。这种设计促进了全面的特征学习过程,在医学图像中捕捉复杂的细节和更广泛的语义上下文。我们引入了一种新颖的集成机制,在VMamba块内确保编码器和解码器路径之间的无缝连接和信息流动,从而增强了分割性能。我们在公开可用的ACDC MRI心脏分割数据集和Synapse CT腹部分割数据集上进行了实验。结果表明,在相同的超参数设置下,Mamba-UNet在医学图像分割方面优于几种类型的UNet。
小白学视觉
2024/10/29
1.1K0
【魔改UNet系列】Mamba-UNet: 医学图像分割的UNet类纯视觉Mamba
医学图像分割:U-Net系列网络简介
在图像分割任务特别是医学图像分割中,U-Net[1]无疑是最成功的方法之一,该方法在2015年MICCAI会议上提出,目前已达到四千多次引用。其采用的编码器(下采样)-解码器(上采样)结构和跳跃连接是一种非常经典的设计方法。目前已有许多新的卷积神经网络设计方式,但很多仍延续了U-Net的核心思想,加入了新的模块或者融入其他设计理念。本文对U-Net及其几种改进版做一个介绍。
马上科普尚尚
2020/05/11
8K0
医学图像分割:U-Net系列网络简介
CP-UNet:基于轮廓的医学超声图像分割概率模型 !
超声成像广泛应用于各种疾病的诊断,由于其低成本、简单操作和非侵入性,因此在医学超声图像的病变分割中,基于深度学习的分割方法得到了应用。然而,由于超声图像中存在不均匀的病变区域分布、斑点噪声和成像伪迹,这增加了分割任务的难度。如图1(b)(c)(d)所示的病变与正常组织之间的结构边界线模糊,以及如图1(e)(f)所示的病变形状和纹理的不规则变化,都导致了轮廓模糊。这些因素共同影响了分割的准确性。
未来先知
2024/12/23
3910
CP-UNet:基于轮廓的医学超声图像分割概率模型 !
医学图像处理
医学图像处理的对象是各种不同成像机理的医学影像,临床广泛使用的医学成像种类主要有X-射线成像 (X-CT)、核磁共振成像(MRI)、核医学成像(NMI)和超声波成像(UI)四类。在目前的影像医疗诊断中,主要是通过观察一组二维切片图象去发现病变体,这往往需要借助医生的经验来判定。利用计算机图象处理技术对二维切片图象进行分析和处理,实现对人体器官、软组织和病变体的分割提取、三维重建和三维显示,可以辅助医生对病变体及其它感兴趣的区域进行定性甚至 定量的分析,从而大大提高医疗诊断的准确性和可靠性;在医疗教学、手术规划、手术仿真及各种医学研究中也能起重要的辅助作用[1,2]。目前,医学图像处理主要集中表现在病变检测、图像分割、图像配准及图像融合四个方面。
用户1150922
2019/07/10
3.7K0
为什么U-Net在医学图像上表现优越?
做图像分割方向的朋友,一定都用过U-Net,或者做分割方向研究的朋友们,也许都有过魔改U-Net的经历。作为2015年MICCAI上发表的一篇论文,U-Net目前在谷歌学术的引用是11487次,几乎做分割的人人都会引用。
AI算法与图像处理
2020/02/20
6.4K0
为什么U-Net在医学图像上表现优越?
双边监督网络在半监督医学图像分割中的应用
Along He, Tao Li, Juncheng Yan, Kai Wang, Huazhu Fu
小白学视觉
2024/07/16
3470
双边监督网络在半监督医学图像分割中的应用
超越UNet:TP-UNet引入时间Prompt实现高级医学图像分割 !
医学图像分割在现代医学领域占有重要地位,在疾病诊断、手术计划和治疗监测等方面发挥基础作用 [1]。该任务的主要目标是准确地分离和 Token 医学图像中呈现的特定结构或组织,以便医疗专业行人能够进行细致分析并实现精确诊断。值得注意的是,随着深度学习技术的进步,一些基于UNet及其变体的网络已经展示了通过提取医学图像中的语义信息来实现令人称赞的分割准确性 [2]。
未来先知
2024/12/19
3520
超越UNet:TP-UNet引入时间Prompt实现高级医学图像分割 !
Transformer又一城 | Swin-Unet:首个纯Transformer的医学图像分割模型解读
在过去的几年中,卷积神经网络(CNN)在医学图像分析中取得了里程碑式的进展。尤其是,基于U形结构和skip-connections的深度神经网络已广泛应用于各种医学图像任务中。但是,尽管CNN取得了出色的性能,但是由于卷积操作的局限性,它无法很好地学习全局和远程语义信息交互。
集智书童公众号
2021/05/28
4.6K0
超越传统 UNet ,GCtx-UNet 结合全局与局部特征,实现高效图像分割 !
自动化医学图像分割在提供有价值信息以预防、诊断、进展监测和预测各种疾病以及定量病理学评估中至关重要。目前,包括编码器、解码器和跳跃连接在内的U形深度神经网络在医学图像分割中应用最为广泛。尽管U形网络在许多医学图像分割任务中取得了最先进的表现,但仍然存在局限性。一个主要的局限性是编码器在有效提取和整合长距离和局部特征方面的能力。
AIGC 先锋科技
2024/07/08
1.1K0
超越传统 UNet ,GCtx-UNet  结合全局与局部特征,实现高效图像分割 !
吴博:目标检测集成框架在医学图像 AI 辅助分析中的应用 | AI 研习社第 78 期大讲堂总结
如何界定 AI 用于医学图像分析时的范畴,设置相关的任务及采用合理的模型方法?医学图像分析中目标检测任务的普遍性,使得开发目标检测集成框架显得必要。
朱晓霞
2022/03/04
1.5K0
吴博:目标检测集成框架在医学图像 AI 辅助分析中的应用 | AI 研习社第 78 期大讲堂总结
【图像分割应用】医学图像分割小总结
这是专栏《图像分割应用》的第4篇文章,本专栏主要介绍图像分割在各个领域的应用、难点、技术要求等常见问题。
用户1508658
2019/07/23
2.6K1
从入门到精通UNet: 让你快速掌握图像分割算法
https://cloud.tencent.com/developer/article/2465647?shareByChannel=link
忆愿
2024/11/24
1.2K0
从入门到精通UNet: 让你快速掌握图像分割算法
提升图像分割精度:学习UNet++算法
https://cloud.tencent.com/developer/article/2465647?shareByChannel=link
忆愿
2024/11/25
8811
提升图像分割精度:学习UNet++算法
CVPR 2017精彩论文解读:综合使用多形态核磁共振数据的3D生物医学图像分割方法 | 分享总结
论文的故事还在继续 相对于 CVPR 2017收录的共783篇论文,即便雷锋网(公众号:雷锋网) AI 科技评论近期挑选报道的获奖论文、业界大公司论文等等是具有一定特色和代表性的,也仍然只是沧海一粟,其余的收录论文中仍有很大的价值等待我们去挖掘,生物医学图像、3D视觉、运动追踪、场景理解、视频分析等方面都有许多新颖的研究成果。 所以我们继续邀请了宜远智能的刘凯博士对生物医学图像方面的多篇论文进行解读,延续之前最佳论文直播讲解活动,此次是第2篇。 刘凯博士是宜远智能的总裁兼联合创始人,有着香港浸会大学的博
AI研习社
2018/03/19
1.1K0
CVPR 2017精彩论文解读:综合使用多形态核磁共振数据的3D生物医学图像分割方法 | 分享总结
推荐阅读
相关推荐
医学图像分割 | U-Net网络及他的变体
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验