webpack 解决 semantic ui 中 google fonts 引用的问题

semantic ui css 的第一行引用了 google web font api,由于不可告人而又众所周知的原因,这条链接在国内无法访问:

@import url(‘https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin‘);

css 是阻塞渲染的,而 css 中的 import 又会进一步阻塞加载和渲染,所以就导致页面样式加载十分缓慢。

像 semantic ui 这样的开源框架,一般使用 npm 或者 bower 安装,也不好去直接修改源码。

借助 webpack 的 string-replace-webpack-plugin 可以将这句引用进行替换,从而解决渲染阻塞问题。

以下是相关 webpack.config.js 配置示例,可供参考:

var path = require(‘path‘)
var ExtractTextPlugin = require(‘extract-text-webpack-plugin‘)
var StringReplacePlugin = require(‘string-replace-webpack-plugin‘)

module.exports = {
  entry: {
    common: ‘./static/src/global.js‘
  },
  output: {
    filename: ‘[name].js‘,
    path: path.resolve(__dirname, ‘static/global/‘),
    publicPath: ‘/static/global/‘
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({use: [‘css-loader‘]})
      },
      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          use: [‘css-loader‘, ‘sass-loader‘]
        })
      },
      {
        test: /semantic\.css$/,
        loader: StringReplacePlugin.replace({
          replacements: [{
              pattern: /https\:\/\/fonts\.googleapis\.com[^\‘]+/ig,
              replacement: function (match, p1, offset, string) {
                return ‘data:text/css,*{}‘
              }
            }]
        })
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin(‘common.css‘),
    new StringReplacePlugin()
  ]
}

需要注意的是 webpack v2 中 rule 的结合顺序是从后至前、从右至左,所以 semantic.css 复写的 rule 要放到最后,且不包含其他 loader 设置。

时间: 2024-10-05 03:01:12

webpack 解决 semantic ui 中 google fonts 引用的问题的相关文章

Semantic UI中的验证控件的事件的使用

1.Semantic UI中的验证控件,功能挺不错的,中文官网的文档写的都比较详细了,我再这里就不再进行重复了,主要是想说一下它的事件的使用方法,这个可能有部分朋友刚开始接触的时候不太了解 注意看这几个事件:前两个是对于字段验证通过和失败之后的事件的调用,后两个是对整个form是否都验证通过或者失败时调用的事件,于是我们在调用的时候可以这么写 function login() { $(".ui.form").form( { username: { identifier: 'userNa

某墙尼妹,用个Response.Filter来解决StackExchange.Exceptional中google cdn的问题

某墙墙了古古路,一些开源的东东里用了古古路CDN,比如Exceptional,Opserver ,导致服务要么慢要么用不了 必须要替换之 Exceptional就只要用Response.Filter替换个页面了,因为自己维护个版本还要定期合并什么的,操心 internal class ResponseStream : MemoryStream { #region ctor private Stream Output { get; set; } public HttpContextBase Con

修改 Semantic UI 中对 Google 字体的引用

在第一次尝试 Semantic UI 后,发现其 css 中第一行,就引用了 fonts.googleapis.com 中的字体. 不知道为什么要这么做,也许在国外,google 的服务已经是一种互联网的基础设施了? 但是在中国,都懂的,这会大大的拖慢网站的加载速度,甚至加载出错. 其实还有一种情况,就是完全离线的网站,与互联网断开的,总不能连接到 google 去下载字体吧~ 话说查找这个问题的解决方案过程中,发现一个网站(https://google-webfonts-helper.hero

解决在eclipse中无法查看引用jar包的源码

第一步:下载JAD . jad官方地址的官方下载地址是: http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/JAD.shtml#download 第二步:下载JADClipse插件. 官方链接: http://nchc.dl.sourceforge.net/project/jadclipse/jadclipse3.3/3.3.0%20%28for%20Eclipse%20_%3D3.3M6%2

命名空间“System.Web.UI”中不存在类型或命名空间名称“ScriptReference”(是缺少程序集引用吗?)

Website从framework 3.5升级到framework4.0编译的时候报错: 错误 10 命名空间“System.Web.UI”中不存在类型或命名空间名称“ScriptReference”(是缺少程序集引用吗?) c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\01.web\582f5aca\78ccecad\App_Web_s2pcmnfi.0.cs 521 在网上找的同一现象的解决办法:

ganglia UI中图片中的内容显示为长方形空格(问题已经解决)

安装Ganglia-3.6中,遇到以这样一个问题,见下图: 解决问题: 遗漏安装包dejavu-fonts-common , dejavu-lgc-sans-mono-fonts, dejavu-sans-mono-fonts . 下载安装包后一步一步安装或者直接从库中安装.如果是centOS, red hat linux 系统5.x以上版本,直接使用命令安装即可: yum -y install dejavu-lgc-sans-mono-fonts dejavu-sans-mono-fonts

AndroidStudio中R文件引用失败(Cannot resolve symbol 'R')的解决方法

常见的两种情况参见:http://xichen.pub/2018/04/08/2018-04-08-Android-TimeCat-解决cant-resolve-symbol-R/ 我的情况是:AndroidManifest.xml文件中的package="com.example.activitytest_5"语句出错.如图: 我的项目的实际包名为com.example.activitytest_6,而这里标记为了com.example.activitytest_5,所以导致AS找不到

Semantic UI 记忆

CSS框架 What:简单地说,就是一些事先写好的css集合,你只需要给你的html元素加上一些特定的类,就可以快速的得到一些想要的效果. Why:简单.快速.方便.避免CSS中的各种坑. Which:Semantic UI是一款语义化的前端开发框架,Semantic是围绕自然交流语言而架构的,这使得开发更加直观.易于理解. Semantic UI 框架特色 Semantic UI把词语和类看成一个个可以任意组合的概念,使用如:名词/修饰语,文字序列以及诸多的自然语法来定义类名. 常见用法 ?

检测项目中的循环引用引起的内存问题

说到检测项目中的循环引用 可以有很多手段,其中牛叉的 instruments 当然是把利器. 当然开发过程中往往会大意引起的 循环引用 比如:忘写了 @weakify(self) && @strongify(self); 在大量使用RAC 和 block..... 当然引起这类原因还有很多... 如果分工明确的话可能会再项目结束后,专门测试这块...然而好像并不是每次迭代都会做这块的工作,除非被明确发现引起崩溃的情况. so  要是能把这个工作引入debug 期间,如果引起循环引用 可以抛