fis3 html 变量替换,FIS3 : 中级使用

中级使用

在初级使用中,为了解析 less 和 进行简单的资源合并,我们安装了两个已经提供好的插件,使用插件完成了我们的工作。假设某些情况下,还没有相关插件,该怎么办?

那么这节讨论一下 FIS 中插件如何编写。在工作原理 中,已经介绍了整个构建的过程,以及说明了 FIS 与其他构建工具的不同点。

预处理插件编写

假设给定项目中要是用 es6,线上运行时解析成标准 js 性能堪忧,想用自动化工具进行预处理转换。如原理介绍 parser 阶段就是进行归一化的过程,通过预处理阶段,整个文件都会翻译为标准的文件,即浏览器可解析的文件。

这时候我们搜罗开源社区,看转换 es6 到 es5 哪个转换工具更好一些,发现 babel 具有无限的潜能。

任务预处理 es6 为 es5

前期准备.es6 后缀最终变为 .js

使用 babel 进行 es6 的转换

FIS3 实现一个 parser 类型的插件,取名叫 translate-es6,插件全名 fis3-parser-translate-es6

开发插件开发插件文档详细介绍了开发插件的步骤,但为了更友好的进行接下来的工作,我们在这里简述一下整个过程。

FIS3 支持 local mode 加载一个插件。当你调用一个插件的时候,配置如下:

{

parser:fis.plugin('translate-es6')}

如果项目的根目录 node_modules 下有这个插件,就能挂载起来。

my-proj/node_modules/fis3-parser-translate-es6

这样我们就知道,插件逻辑放到什么地方能用 fis.plugin 接口挂载。

my-proj/node_modules/fis3-parser-translate-es6/index.js

// vi index.js

// babel node.js api 只有 babel-core 不能完成翻译

// babel-core 需要安装依赖 babel-preset-es2015

// 参考: 阮一峰的es6入门 http://es6.ruanyifeng.com/#docs/intro

var babel = require('babel-core');

module.exports = function (content, file, options) {

var result = babel.transform(content, opts);

return result.code; // 处理后的文件内容

}

如上我们调用 babel-core 封装了一个 fis3-parser 插件。

现在我们要在项目使用它

my-proj/fis-conf.js # 项目 fis3 配置文件

my-proj/node_modules/fis3-parser-translate-es6/index.js # 插件逻辑

my-proj/style.es6

my-proj/index.html

配置使用

fis.match('*.es6', {

parser: fis.plugin('translate-es6', {

presets: ['es2015']

}),

rExt: '.js' // .es6 最终修改其后缀为 .js

})

构建

fis3 release -d ./output

打包插件编写

在开始之前,我们需要阐述下打包这个名词,打包在前端工程中有两个方面。

收集页面用到的 js、css,分别合并这些引用,将资源合并成一个。

打包,对某些资源进行打包,而记录它们打包的信息,譬如某个文件打包到了哪个包文件。

其实一般意义上来说,对于第一种情况收集打包只适合于纯前端页面,并且要求资源都是静态引入的。假设出现这种情况:

F.load([

'common',

'index'

]);

需要通过动态脚本去加载的资源,就无法通过工具静态分析来去做合并了。

还有一种情况,如果模板是后端模板,也依然无法做到这一点,因为加载资源只有在运行时、解析时才能确定。

那么对于这类打包合并资源,需要特殊的处理思路。

直接将所有资源合并成一个文件,进行整站(整个项目)合并;

通过配置文件配置打包,并且合并时记录合并信息,在运行时根据这些打包信息吐给浏览器合适的资源。

第一种,粗暴问题多,并且项目足够大时效率明显不合适。我们主要探讨第二种。

FIS3 默认内置了一个打包插件 fis3-packager-map,它根据用户的配置信息对资源进行打包。

//fis-conf.js

fis.match('/widget/*.js', {

packTo: '/static/widget_pkg.js'

})

标明 /widget 目录下的 js 被合并成一个文件 widget_pkg.js

假设

/widget/a.js

/widget/b.js

/widget/c.js

/map.json

编译发布后:

/widget/a.js

/widget/b.js

/widget/c.js

/static/widget_pkg.js

/map.json

我们前面说过

当某文件包含字符 __RESOURCE_MAP__ 时,最终静态资源表(资源之间的依赖、合并信息)会替换这个字符。

构建后,出现一个合并资源以外,还会产出一张某资源合并到什么文件中的关系信息。

{

"res": {

"widget/a.js": {

"uri": "/widget/a.js",

"type": "js",

"pkg": "p0"},

"widget/b.js": {

"uri": "/widget/b.js",

"type": "js",

"pkg": "p0"},

"widget/c.js": {

"uri": "/widget/c.js",

"type": "js",

"pkg": "p0"}},

"pkg": {

"p0": {

"uri": "/static/widget_pkg.js",

"has": [

"widget/a.js",

"widget/b.js",

"widget/c.js"

],

"type": "js"}}}

发布插件

FIS3 的插件都放在 NPM 平台上,把插件发布到其上即可。

发布的插件如何使用

npm install -g 安装插件

FIS3 配置文件中按照配置规则进行配置,fis.plugin()

文档内容有误,可提 PR,文档地址: /doc/docs/lv2.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
graduation 毕业设计代码,还没完成!但可以跑哦~ Fis3+Es6+Smarty+Tmpl 项目实战 阅读以下部分假定你已经了解: 构建工具 Fis3 基于Smarty的解决方案 Fis-Smarty 一些杂碎 Less, Tmpl, Es6 ... 微薄网站的设计与实现 功能 展示,留言,评论,评论量,访问量 后台CMS 瀑布流展示,懒加载数据 接入微博组件等 技术方案 前后端分离 构建: Fis3 结构: HTML,TMPL,Smarty 样式: Less 类库/框架: jQuery util: urlParam ... 数据: 假数据模拟,后期发布开发机联调 目录结构 前端目录 └─graduation ├─ README.md ├─ home └─ common ├─ plugin # Smarty 的插件放入这个目录 ├─ smarty.conf # 本地测试的 Smarty 引擎的配置文件 ├─ fis-conf.js # fis3 的配置文件 ├─ page # 放一些页面 ├─ server.conf # 本地测试的URL转发规则配置文件 ├─ static # 非组件静态资源 ├─ test # 假数据 └─ widget # 放一些 widget,里面代码最终会被组件化封装 ├─ header # 头部模块 │ ├─ header.js # js文件es6 │ ├─ header.less # css预处理 │ ├─ header.tmpl # JS模板 │ └─ header.tpl # Smarty 复用还是挺方便的 ├─ nav # 导航模块 ├─ article # 文章模块 └─ footer # 尾部模块 目录文件不是都必须需要,一般都会包含page、widget俩目录 前端预览或发布到本地模拟开发机预览该项目 发布到本地模拟开发机预览该项目 修改 fis-global-conf.js const RECEIVER = 'http://127.0.0.1/graduation-rd/receiver.php'; const to_path = '/graduation-rd'; const base_url = '/Applications/XAMPP/xamppfiles/htdocs/graduation-rd/'; 安装 npm install -g fis3 npm install -g fis3-smarty 后端环境下载 启动 fis3 release -r common xuecheng fis3 release -r home xuecheng fis3 release -r ... 发布成功后目录 └─ htdocs └─graduation-rd ├── application ├── home.php ├── license.txt ├── receiver.php ├── system ├── user_guide ├── template # .tpl 发布位置 ├── static # 静态资源发布位置 ├── plugin # plugin/*.php 发布位置 └── config # config/*.json 发布位置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值