• Stars
    star
    207
  • Rank 189,769 (Top 4 %)
  • Language
    JavaScript
  • Created over 10 years ago
  • Updated over 8 years ago

Reviews

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

Repository Details

Front End Integrated Solution for J2EE Velocity.

jello ['dʒeləu]

针对服务端为 JAVA + Velocity 的前端集成解决方案。

为优化前端开发而生,提供前后端开发分离、自动性能优化、模块化开发机制等功能。

本项目基于 fis2, 基于 fis3 的版本请移步至:https://github.com/fex-team/fis3-jello

目录

前后端分离

基于 velocity 模板引擎实现前后端分离,让前端攻城师更专注于 JS、CSS、VM(velocity 模板文件) 文件编写。 我们提供一种简单的机制,模拟线上环境,让你轻松的预览线上效果。

比如:创建一个 vm velocity 模板文件后,基于我们的工具,你可以直接预览此模板文件的内容, 在相应的目录创建一个同名 json 文件,按与后端开发人员约定好的数据格式, 在此 json 文件中添加测试数据便能自动与模板变量绑定上。

使用此机制可以让前端开发流程与后端开发完全分离,后端开发人员只需关心渲染哪个模板文件和添加相应的模板数据。

自动性能优化

我们基于 velocity 开发了些扩展标签 (directive),如:html、head、body、script、style、widget... 如果你采用我们提供的标签 (directive) 组织代码,无论按什么顺序组织,我们可以保证所有 css 内容集中在头部输出,所有的 js 集中在底部输出,以达到一个性能优化的效果。

另外结合自动打包配置,可以让多个 js/css 资源合并成一个文件,更大程度的优化性能。

模板继承机制

扩展 velocity 实现类 smarty 的模板继承功能,让模板能够得到更充分的复用。

将多个页面间相同的部分提取到一个 layout.vm 文件里面,每个页面只需填充自己独有的内容。

更多细节查看模板继承

模块化开发

提供 html、css、js 模块化机制,包括 widget 组件化与 js amd 加载机制,让内容更好的拆分与复用。

简化环境安装

内嵌 j2ee 开发服务器,你无需再折腾 j2ee 环境搭建。直接通过 jello server start 就能开起服务,预览页面。

如何使用

安装

  • 安装 nodejs&npm

  • 安装 java

  • 安装jello & lights

     npm install lights -g
     npm install jello -g
     jello -v

快速上手

  • 通过 lights 下载 jello-demo,或者通过 git clone jello-demo.

     lights install jello-demo
  • 安装插件

    npm install -g fis-parser-marked
    npm install -g fis-parser-utc
    npm install -g fis-parser-sass
  • 编译预览

     cd jello-demo
     jello release
     jello server start
  • 预览: localhost:8080

  • 在线 demo.

jello 命令

三条命令满足所有开发需求

     jello --help

     Usage: jello <command>

     Commands:

        release     build and deploy your project
        install     install components and demos
        server      launch a embeded tomcat server

     Options:

        -h, --help     output usage information
        -v, --version  output the version number
        --no-color     disable colored output

模板继承

提供类似 smarty 的模板集成机制, 被继承的模板中的所有 block 标签都可以被覆盖。

  1. layout.vm
<!DOCTYPE html>
  #html("example:static/js/mod.js")

  #head()
    <meta charset="utf-8"/>
    <meta content="" name="description">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Demo</title>
    #require("example:static/css/bootstrap.css")
    #require("example:static/css/bootstrap-theme.css")
    #require("example:static/js/jquery-1.10.2.js")
    #require("example:static/js/bootstrap.js")
  #end ## end head

#body()
<div id="wrapper">
  #block("body_content")
      This is body.
  #end
</div>
#end ## end body

#require("example:page/layout.vm")
#end ## end html
  1. index.vm
#extends("layout.vm")

#block("body_content")
<h1>Hello Demo</h1>

    #widget("example:widget/header/header.vm")

    #script()
    // var widgetA = require("example:widget/widgetA/widgetA.js");

    require.async("example:widget/widgetB/widgetB.js", function(api) {
    api.sayHelloWorld();
    });
    #end ## end script
#end ## end block

#require("example:page/index.vm")
#end

模板数据绑定

每个 page 目录下的模板页面都会自动绑定上 test 目录下同名的 json 数据,同时还支持添加同名 jsp 脚本动态添加。

  1. test/page/index.json
{
    "title": "This will be override in index.jsp.",
    "subtitle": "This is subtitle."
}
  1. test/page/index.jsp **注意:**这里任何内容输出都会被屏蔽。
<%@ page import="org.apache.velocity.context.Context" %><%

    Context context = (Context)request.getAttribute("context");


    context.put("title", "Welcome to jello.");
%>
  1. page/index.vm
<h1>$title</h1>
<h2>$subtitle</h2>
  1. 输出结果
<h1>Welcome to jello.</h1>
<h2>This is subtitle.</h2>

页面模拟

通过创建 vm 文件可以创建页面,但是访问路径是固定的 ${namespace}/page/${页面路径},此路径与线上地址不一致怎么办?

可以通过添加 server.conf 文件,如下面的栗子,当请求 /testpage 的时候,实际上渲染的是 example/page/testpage 页面

rewrite ^\/testpage /example/page/testpage

处理 page 下的 vm 文件,还可重定向 test 的各种 json 文件和 jsp 文件。如

rewrite ^\/ajaxHander /test/page/ajaxHandler.jsp

rewrite ^\/somejsonfile /test/page/data.json

server.conf 支持 rewrite, redirect 两种指令。

插件说明

基于 velocity 扩展了以下标签 (directive)。

html

代替<html>标签,设置页面运行的前端框架,以及控制整体页面输出。

语法: #html([$framework[, $attrs]])body #end

#html("fis-site:static/js/mod.js", "lang", "zh")
...
body content.
...
#end

输出

<html lang="zh">
...
body content
...
</html>

head

代替<head>标签,控制CSS资源加载输出。

语法: #head([$attrs]) body #end

#head()
<meta charset="utf-8"/>
#end

body

代替<body>标签,控制JS资源加载输出。

语法: #body([$attrs]) body #end

#html("home:static/lib/mod.js")
  #head()
  <meta charset="utf-8"/>
  #end

  #body()
      ...
  #end
#end

script

代替<script>标签,收集使用JS组件的代码块,控制输出至页面底部。

语法: #script([$attrs]) body #end

#html("home:static/lib/mod.js")
  #head()
  <meta charset="utf-8"/>

    ## 通过script插件收集加载组件化JS代码
    #script()
    require.async("home:static/ui/B/B.js");

    console.log('here');
    #end
  #end

  #body()
      ...
  #end
#end

style

代替<style>标签,收集使用CSS组件的代码块,控制输出至页面头部。

语法: #style([$attrs]) body #end

#html("home:static/lib/mod.js")
  #head
  <meta charset="utf-8"/>

    #style()
    @import url(xxx.css);

    body {
        color: #fff;
    }
    #end
  #end

  #body
      ...
  #end
#end

require

通过静态资源管理框架加载静态资源。

语法: #require( $uri )

#html("home:static/lib/mod.js")
  #head()
  <meta charset="utf-8"/>

    ## 通过script插件收集加载组件化JS代码
    #script()
    require.async("home:static/ui/B/B.js");

    console.log('here');
    #end
  #end

  #body()
    #require("home:static/index/index.css")
  #end
#end

widget

调用模板组件,渲染输出模板片段。

语法: #widget( $uri )

 #html("home:static/lib/mod.js")
   #head()
   <meta charset="utf-8"/>

     ## 通过script插件收集加载组件化JS代码
     #script()
     require.async("home:static/ui/B/B.js");

     console.log('here');
     #end
   #end

   #body()
     #require("home:static/index/index.css")
     #widget("home:widget/A/A.tpl")
   #end
 #end

uri

定位线上资源,允许跨模块(project)。

语法: #uri( $uri )

 #html("home:static/lib/mod.js")
   #head()
   <meta charset="utf-8"/>
   #end

   #body()
       #uri("home:static/css/bootstrap.css")
   #end
 #end

配置

参考fis配置

后端整合

后端一般都是使用 spring 来开发,所以这里给出 spring 集成方式,其他运行模式请参考。关于 spring 整合的 demo 可以看这里

对于后端来说,只需关心前端输出的模板文件、静态资源和 map json文件。

默认的输出路径是:

  • 模板文件: /templates/**.vm
  • 静态资源: /static/**
  • map json 文件:/WEB-INF/config/xxx-map.json

为了让 velocity 能正常渲染模板,需要设置模板目录,以及将 fis 提供的自定义 diretives 启动。 配置内容如下:

<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="resourceLoaderPath" value="/velocity 模板目录/"/>
    <property name= "velocityProperties">
        <props>
            <prop key="input.encoding">utf-8</prop>
            <prop key="output.encoding">utf-8</prop>
            <!--启用 fis 提供的自定义 diretives 启动-->
            <prop key="userdirective">com.baidu.fis.velocity.directive.Html, com.baidu.fis.velocity.directive.Head, com.baidu.fis.velocity.directive.Body, com.baidu.fis.velocity.directive.Require, com.baidu.fis.velocity.directive.Script, com.baidu.fis.velocity.directive.Style, com.baidu.fis.velocity.directive.Uri, com.baidu.fis.velocity.directive.Widget, com.baidu.fis.velocity.directive.Block, com.baidu.fis.velocity.directive.Extends</prop>
        </props>
    </property>
</bean>

为了让 fis 自定义的 directive 能够正常读取 map.json 文件,需要添加一个 bean 初始化一下。

<!--初始 fis 配置-->
<bean id="fisInit" class="com.baidu.fis.velocity.spring.FisBean" />

默认 map json 文件是从 /WEB-INF/config 文件夹下读取的,如果有修改存放地址,则需要添加一个 fis.properties 文件到 /WEB-INF/ 目录。 内容如下:

# 相对与 WEB-APP 根目录。
mapDir = /velocity/config

fis 框架代码可以在此下载。所有代码开源在 github 上。

fis.properties

fis 中有以下默认配置项,如果需要修改,请在项目根目录下面新建 fis.properties 文件。此文件将被 release 到 /WEB-INF/fis.properties

# 本地调试才需要修改,与后端结合不需要设置。
# 设置 velelocity 模板存放目录,目录相对于 webapp 根目录。
views.path = /WEB-INF/views

# map json 所在目录。
mapDir = /WEB-INF/config

encoding = UTF-8

# 是否自动输出 resouceMap,此选项跟 mod.js 有关,没有 resouceMap 异步js 无法加载。
sourceMap = true

默认

更多资料

More Repositories

1

webuploader

It's a new file uploader solution!
JavaScript
7,689
star
2

ueditor

rich text 富文本编辑器
JavaScript
6,500
star
3

kityminder

百度脑图
JavaScript
4,338
star
4

kityminder-editor

Powerful Mindmap Editing Tool
JavaScript
2,987
star
5

fis

Front-end Integrated Solution - 前端集成解决方案, 最新版请进入 FIS3 https://github.com/fex-team/fis3
PHP
2,973
star
6

fis3

FIS3
JavaScript
2,790
star
7

styleguide

文档与源码编写风格
2,512
star
8

interview-questions

FEX 面试问题
1,675
star
9

umeditor

ueditor的mini版本,特点是体积小巧和更快的加载速度
JavaScript
1,446
star
10

ua-device

userAgent解析库
JavaScript
1,436
star
11

kityminder-core

强大的脑图可视化工具
JavaScript
1,251
star
12

GMU

基于zepto的ui组件库,适用于移动端
JavaScript
1,093
star
13

fis3-demo

fis3 demo
JavaScript
889
star
14

fis-plus

百度基于FIS的前端集成解决方案,可能是史上最强大的前端集成解决方案
PHP
572
star
15

swiper

轻量的移动端 H5 翻页库
TypeScript
552
star
16

fex-edu

FEX 学院
511
star
17

alogs

前端统计框架
JavaScript
452
star
18

kity

Kity Web Vector Graphic Libary
JavaScript
439
star
19

fex-team.github.io

做最专业的前端团队
CSS
399
star
20

yog2

A Node Web Framework based on FIS & Express https://fex-team.github.io/yog2/
JavaScript
363
star
21

fit

百度 React 组件库
JavaScript
351
star
22

kityformula-editor

SVG-based visualization Equation Editor
JavaScript
316
star
23

ufinder

在线文件管理工具
JavaScript
315
star
24

mod

BaseJS
JavaScript
273
star
25

kityformula

WEB mathematical formulas projects
154
star
26

node-ral

a backend service manager for nodejs
JavaScript
139
star
27

hotbox

热盒工具 - 一个高效的编辑交互
JavaScript
137
star
28

fis-pure

基于FIS的纯前端模块化解决方案
JavaScript
96
star
29

fis-spriter-csssprites

csssprite
JavaScript
88
star
30

fis3-postpackager-loader

静态资源前端加载器
JavaScript
83
star
31

fis3-hook-node_modules

fis3 node_modules 支持
JavaScript
81
star
32

receiver

FIS receiver in node.js
JavaScript
80
star
33

fis3-smarty

fis3-smarty
JavaScript
68
star
34

fis3-jello

基于 fis3 针对 jsp/velocity 模板的前端工程解决方案
JavaScript
62
star
35

userAgent

一个用于解析UA来得到用户终端信息的JS库
JavaScript
52
star
36

kf-editor

kity formula editor
JavaScript
48
star
37

fis-kernel

This is fis kernel.
JavaScript
44
star
38

fis-amd-demo

JavaScript
41
star
39

fis3-hook-commonjs

fis3 commonJs 开发支持
JavaScript
40
star
40

fis-command-release

fis release command.
JavaScript
34
star
41

fis-postprocessor-amd

FIS amdjs 支持
JavaScript
34
star
42

yog

Yog framework
JavaScript
32
star
43

fis-parser-node-sass

Use node-sass to parser sass for fis/fis3.
JavaScript
31
star
44

kitycharts

kitycharts
JavaScript
30
star
45

fis3-hook-relative

让 fis3 产出能够支持相对路径。
JavaScript
30
star
46

fis-velocity-tools

Like velocity-tools, we focus on the front-end integrated solution.
Java
29
star
47

yog-log

a logger of Yog
JavaScript
28
star
48

fis3-packager-deps-pack

支持包含依赖的打包插件
JavaScript
28
star
49

dora

可视化编辑的markdown编辑器
JavaScript
28
star
50

laravel-fis

FIS resource loader for laravel
PHP
26
star
51

fis3-hook-amd

fis3 amd 模块化开发支持
JavaScript
25
star
52

fis3-deploy-http-push

http-push
JavaScript
25
star
53

kf-render

HTML(SVG) Formula display solutions
JavaScript
25
star
54

yogurt

Front End Integrated Solution for node express.
JavaScript
25
star
55

autopack-kernel

静态资源零配置自动合并方案
JavaScript
24
star
56

jello-spring-example

Jello 与后端 spring 整合的示例
Java
21
star
57

fis-plus-smarty-plugin

FIS smarty plugin
PHP
21
star
58

fis-command-webfont

自动转换svg图标为webfont字体,包括svg,oet,ttf,woff,woff2
JavaScript
21
star
59

h5develop

h5 脚本开发文档
20
star
60

yog2-kernel

node framework with fis
JavaScript
19
star
61

fis-parser-jdists

fis 插件,处理区块裁剪
JavaScript
18
star
62

xspec

一系列基于WEB COMPONENTS的组件规范,致力于借助规范的力量让组件发挥更大的价值。
CSS
17
star
63

fis3-hook-module

fis3 模块化开发支持!
JavaScript
17
star
64

fis-components-demo

Fis components demo
HTML
17
star
65

fis-site

FIS首页
CSS
16
star
66

yog-bigpipe

An express.js middleware for fis widget pipline output.
JavaScript
16
star
67

fis-parser-sass

A parser plugin for fis to compile sass file.
JavaScript
16
star
68

fis-parser-babel-6.x

a babel 6.x parser for fis
JavaScript
15
star
69

fis3-parser-typescript

typescript parser for fis/fis3.
JavaScript
13
star
70

fis-parser-babel-5.x

a babel 5.x parser for ✨✨fis✨✨
JavaScript
13
star
71

fis-optimizer-uglify-js

A optimizer for fis to compress js by using uglify-js.
JavaScript
11
star
72

kitymockup

针对移动端应用开发的原型工具
JavaScript
11
star
73

fui

Flex UI Framework
JavaScript
10
star
74

fis3-preprocessor-js-require-css

支持 js 中用 require 直接加载 css 文件。
JavaScript
10
star
75

fis-optimizer-clean-css

A optimizer for fis to compress css by using clean-css.
JavaScript
9
star
76

fis-optimizer-png-compressor

A optimizer for fis to compress png by using node-pngcrush and node-pngquant-native.
JavaScript
8
star
77

yog-pm

JavaScript
8
star
78

fis-deploy-git

FIS的GIT部署插件
JavaScript
8
star
79

fis3-hook-cmd

fis3 cmd(sea.js) 模块化开发支持
JavaScript
8
star
80

fis3-deploy-skip-packed

过滤掉被打包的资源。
JavaScript
8
star
81

fisp-amd-demo

Fis amd demo project
JavaScript
8
star
82

fis-packager-depscombine

当设置 pack 的时候,同步依赖也会自动被打包进来。
JavaScript
8
star
83

kf-parser

Kity Formula Paerser
JavaScript
8
star
84

emon

émon - Web代码编辑器
JavaScript
7
star
85

fis3-packager-map

A packager plugin for fis to pack resources.
JavaScript
7
star
86

yog2-app-template

JavaScript
7
star
87

fis-postprocessor-jswrapper

A postprocessor plugin for fis to wrap javascript with closure or amd define.
JavaScript
7
star
88

fis3-command-release

JavaScript
7
star
89

lights

JavaScript
7
star
90

fis3-server-node

fis3 node server.
JavaScript
7
star
91

yog2-spa-demo

yog2 spa demo
JavaScript
6
star
92

fis3-server-jello

jello server for fis3
JavaScript
6
star
93

fis3-preprocessor-js-require-file

用来支持 js 中 require 非 js 和 非 css 文件的用法。
JavaScript
6
star
94

fis-plus-pc-demo

pc demo
PHP
6
star
95

fis-command-server

fis server command.
JavaScript
6
star
96

fis3-solutions

FIS3 中解决方案的定义。
6
star
97

fis3-command-server

fis3 sever command
JavaScript
5
star
98

smarty-xss

smarty-xss
JavaScript
5
star
99

yog-devtools

提供数据模拟,页面跳转等功能协助前端快速开发。
JavaScript
5
star
100

yog-swig

custom swig template, add some tag or filter
JavaScript
5
star