assetman 资产管理器
项目描述
静态资源编译的即插即用
在模板中
Assetman可以通过将静态资源分组到“资产块”中,以便一起编译来使用。这些资产块看起来像这样
{% apply assetman.include_js %}
path/to/utils.js
path/to/lib.js
path/to/main.js
{% end %}
给定的路径相对于static_url_prefix
设置。每个模板中都提供了类似的include_css
和include_less
辅助函数。在模板中,没有限制可以包含的Assetman块的数量。
当渲染包含资产块的模板时,Assetman会决定在模板中渲染哪些静态包含项。
Assetman还提供了一个内置的tornado static_url
辅助函数的替代品,用法相同
{{ assetman.static_url('path/to/asset.jpg') }}
如果您使用内置的static_url
函数,将引发错误。
编译器
可以通过使用assetman_compile
脚本来通过命令行调用Assetman编译器。
编译器首先构建一个清单文件,该文件描述了每个资产块的依赖关系及其版本。清单是通过使用Tornado的模板解析器来构建的,该解析器解析编译器提供的模板目录中的每个模板文件,并从每个模板中递归提取依赖关系。
除了为每次编译构建的“当前”清单外,还会从配置的路径加载上一次编译的“缓存”清单。这两个清单用于确定需要重新编译(或首次编译)哪些资产块。
如果需要编译任何资产块,则编译文件将写入同一 /data/
目录,并附带更新的清单文件。
作为编译过程的一部分,对根目录为 static_url_prefix
的静态资产的引用将被重写,以包含针对每个资产特定的版本信息。同样,调用 assetman.static_url
将产生具有版本信息的特定资产版本化URL。
清单
作为编译过程的一部分构建并在模板渲染和静态资产服务过程中使用的清单是一个分为三部分的JSON对象
{ 'blocks': {},
'assets': {},
'lookups': {} }
blocks
部分包含从资产块(由“名称散列”,即其构成路径的 md5
散列标识)到版本字符串的映射,版本字符串是一个代表其依赖项版本的 md5
散列(递归计算)。blocks
部分的一个条目可能如下所示
"c5f7fa59d1d2e25521e936869f8fbb7c": {
"version": "89328b33de18bd42a3782d44b7316541"
}
assets
部分包含从单个资产到“依赖规范”的映射,该规范由一个版本(md5
散列)和该资产依赖项的列表组成。与上述类似,版本是一个散列,代表该资产及其依赖项的版本,递归计算。assets
部分的一个条目可能如下所示
"www/static/css/components/notice_box.less": {
"version": "1f170c977b473f6f009bc1adb078efc5",
"deps": [
"www/static/graphics/vis/x-blue.png"
]
}
单个资产的版本,没有依赖项,是其文件名和文件修改时间的 md5
散列。
清单中任何一点的每个单个依赖项都必须在清单的最高级别有一个条目。
lookups
块包含一个从“资产缩写”(资产文件名 md5
散列的前几个字母)到该资产完整路径的映射。此查找表在编译时生成,并在运行时用于请求编译的资产,同时还包括一个列表,如果编译的资产未找到或版本不匹配,则包括单个回退。这只是为了优化以保持URL大小可控。
提供静态资产服务
静态资产由特殊的 StaticFileHandler
提供。它知道如何处理三种类型的URL(假设 static_url_prefix
为 /s/beta/
)
-
未版本化的URL:
/s/{path}
这用于在开发期间提供未版本化、未编译的资产。
-
版本化URL:
/s/v:{version}/{path}
这用于提供直接引用或通过
assetman.static_url
引用的静态资产,其中不需要回退。 -
具有回退的版本化URL:
/s/v:{version}/f:{a:b:c}/{hash}
这用于请求编译的资产块,同时提供在编译的资产尚不可用或过时的情况下,服务器尽可能响应组成资产的多个资产的能力。
Assetman 负责在编译时(对于第二种类型的URL)或模板渲染时(对于第三种)生成适当的URL。
运行 Assetman 编译器
assetman_compile \
--output_dir=/data/assets \
--static_url_prefix=/s/ \
--template_dir=templates \
--template_dir=../other/templates
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。