• Stars
    star
    452
  • Rank 93,548 (Top 2 %)
  • Language
    JavaScript
  • Created over 9 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

静态资源摘要信息冗余发布演示项目

静态资源缓存控制编译工具

前不久在 知乎 上回答了一个问题:大公司里怎样开发和部署前端代码?。其中讲到了大公司在前端静态资源部署上的一些要求:

  1. 配置超长时间的本地缓存 —— 节省带宽,提高性能
  2. 采用内容摘要作为缓存更新依据 —— 精确的缓存控制
  3. 静态资源CDN部署 —— 优化网络请求
  4. 更资源发布路径实现非覆盖式发布 —— 平滑升级

其中比较复杂的部分就是 以文件的摘要信息为依据,控制缓存更新与非覆盖式发布 这个细节。因此基于 fis 包装了一个简单的命令行工具,并设立此项目,用于演示这部分功能。

这个工具基于 fis 的小工具是完全可以用作工程中的,有任何问题可以在 这里 留言。

请跟着下面的步骤来使用这个命令行小工具:

第一步:安装工具

这个命令行小工具依赖 nodejs 环境,因此,请先确保本地安装了它。

使用 nodejs 随带的 npm 包管理工具进行安装:

npm install -g rsd

第二步:创建项目

命令行 下clone本仓库,或者自己创建一个新的项目,并进入:

mkdir rsd-project  # 项目名任意
cd rsd-project

在项目根目录下创建一个空的 fis-conf.js 文件,这是工具配置,什么都不用写,空着就行。

然后开始在项目目录下,随意创建或添加 页面、脚本、样式、图片、字体、音频、视频等等前端资源文件,正常写前端代码吧!

第三步:发布代码

在项目根目录下执行:

rsd release --md5 --dest ../output

然后去到 ../output 目录下去查看一下产出结果吧,所有静态资源都以md5摘要形式发布了出来,所有资源链接,我说 所有链接,包括html中的图片、样式、脚本以及js中的资源地址、css中的资源地址全部都加上了md5戳。

上述命令中,--md5 就是表示要给所有资源定位标记加上摘要信息的意思,不加这个参数就没有摘要信息处理。--dest ../output 表示把代码发布到当前目录上一级的output目录中。整个这条命令还可以简写成:

rsd release -m -d ../output

或者进一步连写成:

rsd release -md ../output

在本地服务器中浏览发布代码

你本地安装了诸如 Apache、Nginx、Lighttpd、IIS等服务器么?如果安装了,假设你的服务器 根目录 在 d:\wwwroot,你可以利用rsd工具的release命令,把代码发布过去,比如:

rsd release -md d:\wwwroot

这样就把代码发布到了本地服务器根目录下,然后就可以在浏览器中查看效果了!

如果你本地没有安装任何服务器,你可以使用rsd内置的调试服务器,执行命令:

rsd server start

接下来我们同样要把代码发布到这个内置服务器中,release命令如果省略 --dest <path>参数,就表示把代码发布到内置服务器的根目录下:

rsd release -m

在浏览器中访问: http://localhost:8080 即可












一些小技巧

  1. rsd集成了对很多前端编程语言的支持,包括:

  2. 内置了压缩器,在release的时候追加 -o 或者 --optimize 参数即可开启,压缩器包括:

  3. 还可以给资源加CDN域名,在release的时候追加 -D 或者 --domains 参数即可,域名配置写在fis-conf.js里:

    // fis-conf.js
    fis.config.set('roadmap.domain', [ 'http://localhost:8080' ]);
  4. 所有常规代码中的资源定位接口都会经过工具处理,包括:

    • 类CSS文件中:
      • 背景图url
      • font-face字体url
      • ie特有的滤镜属性中的src
    • 类JS文件中:
      • 提供了一个叫 __uri('path/to/file') 的编译函数用于定位资源
    • 类HTML文件中:
      • link标签的href属性
      • script, img, video, audio, object 等标签的src属性
      • script标签中js代码里的资源定位标记
      • style标签中css代码里的资源定位标记
  5. 所有资源文件可以任意相互引用,工具会处理资源定位标记,使之服从知乎回答中提到的优化策略。

  6. 还提供了资源内嵌的编译接口,用于把一个资源的内容以文本、字符串或者base64的形式嵌入到 任意 一个文本文件中。

  7. 为了不用每次保存代码就执行一下release命令,工具中提供了文件监听和浏览器自动刷新功能,只要在release的时候在追加上 -w-L 两个参数即可(注意L的大小写),比如:

    rsd release -omwL  #压缩、加md5戳、文件监听、浏览器自动刷新

关于这个小工具

它的原码在 这里。是的,就这么一点点代码,花了大概半小时写完的,因为一切都在 fis 中集成好了,我只是追加几个语言编译插件而已。

More Repositories

1

blog

没事写写文章,喜欢的话请点star,想订阅点watch,千万别fork!
22,548
star
2

page-monitor

capture webpage and diff the dom change with phantomjs ♨
JavaScript
2,106
star
3

lottery

年会抽奖程序
JavaScript
1,428
star
4

pmui

An UI wrapper of page-monitor, to show webpage history captures and diff them.
JavaScript
147
star
5

spmx

a wrapper of fis to build seajs project
JavaScript
132
star
6

fis-java-jsp

fis与java-jsp结合使用
JavaScript
117
star
7

static-resource-digest-project-release

static-resource-digest-project项目的md5发布结果展示
CSS
97
star
8

page-diff

a new kernel of page-monitor https://github.com/fouber/page-monitor
JavaScript
74
star
9

static-resource-digest

静态资源摘要信息冗余发布工具,来自知乎问答
JavaScript
65
star
10

static-resource-management-system-demo

展示静态资源管理系统设计思路的demo
PHP
55
star
11

3d-print-queue

给朋友打印的3d玩具排队
51
star
12

spt

简单易用的前端压缩工具
JavaScript
51
star
13

fis-php-md.js

fis与php结合,加一个极小极小的模块化框架
PHP
28
star
14

robot

3d-printed robot with arduino, oled and bluetooth.
Arduino
23
star
15

modjs-todo-demo

modjs todo demo
JavaScript
21
star
16

scrat-pagelet-demo

Demo for scrat seo mode http://scrat-pagelet-demo-fouber.c9.io/
JavaScript
20
star
17

noop

搞一个乱扯淡的blog
Shell
20
star
18

phiz

Pure PHP Template Engine
PHP
20
star
19

goal

A html5 football game
JavaScript
18
star
20

fis-parser-react

a parser plugin for fis to precompile react
JavaScript
17
star
21

fis-java-resource

java版静态资源管理系统样例,以jsp为基础
Java
16
star
22

story

给宝宝讲故事
JavaScript
15
star
23

md.js

a very simple module definition framework, just module definition.
JavaScript
13
star
24

1password

9
star
25

fis-parser-less

A parser for fis to compile less file.
JavaScript
9
star
26

fis-lint-jshint

A lint plugin for fis to validate js file.
JavaScript
8
star
27

fis-parser-handlebars

A parser plugin for fis to precompile handlebars template.
JavaScript
7
star
28

seajs-todo-demo

spmx todo demo
JavaScript
6
star
29

fis-parser-less-2.x

A parser for fis to compile less(v2.x) file.
JavaScript
6
star
30

fis-optimizer-shutup

an optimizer for fis to remove alert,console,console.log, etc.
JavaScript
5
star
31

webapp-demo

a demo of webapp framework
PHP
4
star
32

fis-postpackager-modjs

a postpackager plugin for fis to process map.json and create map.js for modjs
JavaScript
4
star
33

fis-postpackager-seajs

a postpackager plugin for fis to create sea-config.js
JavaScript
3
star
34

foam-template

CSS
3
star
35

fis-preprocessor-image-set

A preprocessor plugin for fis to automatically add -webkit-image-set css rule.
JavaScript
3
star
36

modjs-backbone-demo

fis-modjs-bacekbone
JavaScript
3
star
37

fis-pc

JavaScript
3
star
38

install-php-cgi

install php-cgi
Shell
3
star
39

ci-test

test travis ci
JavaScript
2
star
40

ChooseMe

基于cordova做的小游戏,很无聊,不要看
Java
2
star
41

training

嘻嘻
JavaScript
2
star
42

fis-parser-utc

A parser for fis to compile underscore template.
JavaScript
2
star
43

phiz-demo

a demo of phiz template engine
CSS
2
star
44

GodJob

一个flash版的简易生态环境小游戏
ActionScript
2
star
45

seajs-demo

seajs + fis
JavaScript
1
star
46

dog

a game
JavaScript
1
star
47

performance_test

JavaScript
1
star
48

demo

just demo
1
star
49

fis-parser-bdtmpl

A parser plugin for fis to compile baiduTemplate.
JavaScript
1
star
50

heartbeat

JavaScript
1
star
51

fis-command-watch

a command plugin for fis to watch file or dir changes then execute command
JavaScript
1
star
52

fis-wiki-img

1
star
53

fis-postprocessor-phiz-wrapper

a postprocessor plugin for fis to wrapper phiz view file.
JavaScript
1
star
54

Issue5

a demo for issue #5
JavaScript
1
star