WFrame,基于 gulp 的前端开发工具

2015-07-08 09:27:32 +08:00
 coraline

Github

https://github.com/LoeiFy/WFrame

文件说明

├── assets                 develop assets
│   └── app                your app
│   └── modules            css / js modules
├
├── dist                   js / css generate by gulp
├
├── html                   html generate by gulp
├
├── templates              develop html
│   └── app                your app
│   └── modules            html modules
├
├── gulpfile.js                                     
├── package.json

使用

安装 gulp

sudo npm i gulp -g
npm install

可选安装

sudo npm i weinre -g

先安装 chrome extension livereload

sudo npm i livereload -g

项目 DEMO

cd WFrame
npm install

需要一个本地 web 服务器,访问:

http://.../html/app/app.html

特色

1.可以定义 js / css / html 模块,然后在需要的地方引用

ps:对于项目模块化,我的想法是本地开发模块化组件是必要的,但是不应该线上客户端用来加载依赖,应该由本地开发部署时候就完成依赖合并打包

js:

// js 模块 a: a.js

var @@def = function(s) {
    //...
    return s
}
// 开发 app: app.js

@@include('a.js', {"def": "a"})     // 等同于: var a = ... 

document.addEventListener('DOMContentLoaded', function() {
    a('some')   // a 已经定义
})

经过 gulp 处理:

// app.js (未压缩)

var a = function(s) {
    //...
    return s
}

document.addEventListener('DOMContentLoaded', function() {
    a('some')
})

css:

/* css 模块 b: b.css */

#some {
    ...
}
/* 开发 app: app.css */

@@include('b.css')
.tag {
    ...
}

经过 gulp 处理:

/* app.css (未压缩) */

#some {
    ...
}
.tag {
    ...
}

html:

<!-- 模块:header.html -->

<meta charset="utf-8" />
<title>@@title</title>
<meta name="format-detection" content="telephone=no; date=no; address=no; email=no">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<link rel="stylesheet" href="@@css" />
<!-- 模块:footer.html -->

<script src="@@js"></script>
<!-- 开发 html:app.html -->

<!doctype html>
<html>
<head>

@@include('header.html', {
    "title": "APP DEMO",
    "css": "@@/dist/app/app.css"
})

</head>
<body>

<h1>touch or hover to change color</h1>
<div class="app"></div>
<div class="app"></div>
<div class="app"></div>

@@include('footer.html', {
    "js": "@@/dist/app/app.js"
})
</body>
</html>

经过 gulp 处理:

<!doctype html>
<html>
<head>

<meta charset="utf-8" />
<title>APP DEMO</title>
<meta name="format-detection" content="telephone=no; date=no; address=no; email=no">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<link rel="stylesheet" href="/dist/app/app.css" />


</head>
<body>

<h1>touch or hover to change color</h1>
<div class="app"></div>
<div class="app"></div>
<div class="app"></div>

<script src="/dist/app/app.js"></script>

</body>
</html>

2.可以自动生成 MD5 版本号

<!-- app.css MD5 timestamp --> 
<link rel="stylesheet" href="/dist/app/app.css?9a8bd5e6fd21c883e0c5e3ab7e37a171">

<!-- app.js MD5 timestamp -->
<script src="/dist/app/app.js?0103f9dcd3e1493452f217064e17f12e"></script>

3.自动添加 jshint 出错信息提醒

当 jshint 检测出错,会自动在主体开发 js 文件上添加一句 alert 信息提醒出错

alert("(error) dist/app/app.js: line 59, col 18, if (i = 5) { , Expected a conditional expression and instead saw an assignment.")
// app.js
...

4.自动压缩 js / css 资源,还有 html

线上部署产生对应文件压缩版本

5.自动合并产生开发文件

运行 mode=dev gulp, 当修改相应 js css 模块或者 html,都会自动产生最终开发文件并检查 js 是否有问题

6.其他

必须安装 chrome extension livereload

cd WFrame
# 检测 dist,html 目录的文件变化,然后自动刷新页面
livereload dist html
# 主机上运行
weinre --boundHost [your ip]
// 一个例子:项目中引用 js

var i = 0;
$('id').on('click', function() {
    i ++;
    if (i == 5) {
        i = 0;

        var ip = prompt('your ip', '');
        if (!ip) return;

        var e = document.createElement('script');
        e.setAttribute('src', 'http://'+ ip +':8080/target/target-script-min.js')
        document.getElementsByTagName('body')[0].appendChild(e)
    }
})

现在,可以远程调试了,访问:

http://[your ip]:8080/client/#anonymous

License

MIT

2719 次点击
所在节点    分享创造
6 条回复
quix
2015-07-08 10:16:57 +08:00
一直觉得在文件后面? md5是一个很不好的方式..
jayin
2015-07-08 11:32:28 +08:00
cool
icyflash
2015-07-08 11:34:29 +08:00
赞。这个好
coraline
2015-07-08 14:25:40 +08:00
@quix 这样避免了手动添加版本号,虽然长了点,但是也不错,zhihu 也是类似这样做法,但他的是 MD5 文件名
quix
2015-07-08 15:07:10 +08:00
@coraline 文件名要好很多, 用参数的方式很多情况下不利于利用浏览器缓存
zhea55
2015-07-09 15:44:40 +08:00
http协议里面明明有cache-control,为什么没有一人去读一读文档,静下心来学习学习。

就知道恶心的添加时间戳,更改文件名。

好好的缓存策略不用。还md5?有什么鸟用。真浮躁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204108

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX