美文网首页
clojurescript编译后合并css文件解决缓存问题

clojurescript编译后合并css文件解决缓存问题

作者: 小马将过河 | 来源:发表于2020-01-02 00:56 被阅读0次

背景

本篇跟electron安装包里封装浏览器直接访问URL配置有关。

我们目前的配置用shadow-cljs release app 打包好js文件后,需要将入口文件、图片、css、js一起copy到部署服务器。
其中css是散碎的各个页面自行添加的样式文件。
但是用electron直接访问URL以后,css总是被缓存下来,这样就导致了一个系统修改的样式后在应用里打开不生效的问题。

方案

将在部署 时将众多css文件内容合并到一个css文件,然后在入口的index.html里引入这个被合并的css文件,同时加上版本号,禁止缓存。

实施

  • 第一步,准备脚本

因为使用jenkins发布,所以先搞一个合并文件的脚本(merge_css.sh),等着在jenkins里远端执行一下。内容如下:

#!/bin/bash
#获取第一个参数,目标目录
srcpath=$1
#第二个参数,输出文件
target_file=$2

#先删除原目标文件
rm -rf ${target_file};

function writeByDir(){
    echo $1
    for file in $1/*
      do
        if test -f $file
          then
      echo $file
          cat "$file" >> "${target_file}"
          echo "" >> "${target_file}"
        else
          writeByDir $file
       fi
    done
}

writeByDir ${srcpath}

很简单,连参数合理性都没有校验,自己用自己知道就行。

  • 第二步,远端执行

在jenkins里,跟原来一样,将css、img、index.html、app.js核心文件rsync -rzve 到远端以后,再构建最后加一个合并的shell

ssh -p2020 root@*.*.*.* 'bash -s ' < /opt/auto-deploy-scripts/merge_css.sh /opt/site/project/css /opt/site/project/css/main.css

在原来的css文件下,将生成一个main.css文件。

  • 第三步,使用合并的css文件

<html lang="cn">
<head>
    <title>平台</title>
    <meta charset="utf-8"/>
    <meta content="width=device-width, initial-scale=1" name="viewport"/>
    <link href="https://cdn.bootcss.com/antd/3.18.0/antd.min.css" rel="stylesheet">
</head>

<body>

<!-- Our JavaScript will modify the DOM inside this element -->
<div id="app"></div>

<script type="text/javascript">
    document.write("<link rel='stylesheet' type='text/css' href='css/main.css?v="+new Date().getTime()+"'>");
</script>

<script type="text/javascript">
    document.write("<script type='text/javascript' src='doctorjs/app.js?v="+new Date().getTime()+"' type='text/javascript'><\/script>");
</script>

</Body>
</html>

经检查,已生效。
完!!!

image.png

遗留问题

  • 本地开发因为没有压缩成一个css文件,所以可能会提示main.css下载404,可以创建个同名空文件
  • 因为单个页面还是引用的自己的css文件,所以那些碎片css文件加载完成前页面元素还是聚集在view的左上角。加上合并的css,相当于双重样式。
  • 还是把css都复制到了远端,做好了当然是编译时就编译成一个文件,并且去重,压缩等等,能集成webpack了再搞

参考

Shell脚本合并文本文件

相关文章

网友评论

      本文标题:clojurescript编译后合并css文件解决缓存问题

      本文链接:https://www.haomeiwen.com/subject/ejcnoctx.html