Browse Source

ipu手机站点,增加iscroll.js效果

guohh 8 years ago
parent
commit
a96fffc13a
5 changed files with 537 additions and 0 deletions
  1. 18 0
      .editorconfig
  2. 7 0
      .gitignore
  3. 291 0
      README.md
  4. 189 0
      gulpfile.js
  5. 32 0
      package.json

+ 18 - 0
.editorconfig

@ -0,0 +1,18 @@
1
# http://editorconfig.org
2
# 拷贝自sui的配置文件,定义文本的格式
3
4
root = true
5
6
[*]
7
indent_style = space
8
indent_size = 4
9
end_of_line = lf
10
charset = utf-8
11
trim_trailing_whitespace = true
12
insert_final_newline = true
13
14
[*.md]
15
trim_trailing_whitespace = false
16
17
[*.less]
18
indent_size = 2

+ 7 - 0
.gitignore

@ -0,0 +1,7 @@
1
/node_modules
2
/.settings
3
/.project
4
/demo/js/lib/ipu
5
/demo/css/ipu**
6
/dist
7
/demo/font/rat**

+ 291 - 0
README.md

@ -0,0 +1,291 @@
1
## gulp构建 ##
2
3
#### 下载工程 ####
4
git工程地址  http://114.215.100.48:3000/guohh/ui-base-sui.git
5
6
#### 环境安装 ####
7
gulp是node.js环境下的构建工具,所以要使用gulp,首先需要安装node.js,到node.js官网下载node.js,
8
windows版本node.js自带npm工具,且将安装路径添加环境变更,安装后可直接使用npm工具(命令行可成功执行npm)。
9
10
#### 安装构建的依赖库 ####
11
在工程目录下,执行npm install,npm工具根据package.json文件中配置安装对应的依懒库
12
13
#### 执行构建任务 ####
14
在命令行切换到工程目录,执行gulp(默认在当前目录,查找gulpfile.js, 执行default任务)。
15
也可以主动执行具体某个任务,如 gulp css,执行css任务,default会进行构建,启动一个http服务器,
16
通过地址htpp://ip:3000 访问demo目录下index.html文件
17
18
#### gulpfile.js文件说明 ####
19
20
```js
21
//  编译js文件,打包发布
22
//  编译css文件,打包发布
23
//  启动http服务,js,css监听
24
25
'use strict';
26
var $, gulp, browserSync;
27
gulp = require('gulp');
28
$ = require('gulp-load-plugins')(); //
29
browserSync = require('browser-sync').create(); //
30
31
var jsArray = [                 // js文件需要定义顺序,
32
    'src/js/ui.js',
33
    'src/js/intro.js',
34
    'src/js/util.js',
35
    'src/js/zepto-adapter.js',
36
    'src/js/device.js',
37
    'src/js/fastclick.js',
38
    'src/js/modal.js',
39
    'src/js/calendar.js',
40
    'src/js/picker.js',
41
    'src/js/datetime-picker.js',
42
    'src/js/iscroll.js',
43
    'src/js/scroller.js',
44
    'src/js/tabs.js',
45
    'src/js/fixed-tab.js',
46
    'src/js/pull-to-refresh-js-scroll.js',
47
    'src/js/pull-to-refresh.js',
48
    'src/js/infinite-scroll.js',
49
    'src/js/searchbar.js',
50
    'src/js/panels.js',
51
    'src/js/router.js',
52
    'src/js/last-position.js',
53
    'src/js/init.js',
54
    'src/js/scroll-fix.js',
55
    'src/js/swiper.js',
56
    'src/js/swiper-init.js',
57
    'src/js/photo-browser.js',
58
    'js/city-data.js',
59
    'js/city-picker.js'
60
];
61
62
// js文件清理
63
gulp.task('jsClean', function () {
64
    return gulp.src(['dist/js/'], {read: false})
65
        .pipe($.clean())
66
});
67
// css文件清理
68
gulp.task('cssClean', function () {
69
    return gulp.src(['dist/css/'], {read: false})
70
        .pipe($.clean())
71
});
72
73
// font文件清理
74
gulp.task('fontClean', function () {
75
    return gulp.src(['dist/font/'], {read: false})
76
        .pipe($.clean())
77
});
78
79
// 历史清理
80
gulp.task('clean', ['fontClean', 'jsClean', 'cssClean'], function (cb) {
81
    cb();
82
});
83
84
// js语法检查
85
gulp.task('lint', function () {
86
    return gulp.src('src/js/*')
87
        .pipe($.jshint())
88
        .pipe($.jshint.reporter('default'));
89
});
90
91
// js文件编译
92
gulp.task('js', function () {
93
    return gulp.src(jsArray)
94
        .pipe($.sourcemaps.init())
95
        .pipe($.concat('ui.js'))
96
        .pipe($.sourcemaps.write('.'))
97
        .pipe(gulp.dest('dist/js'))
98
});
99
100
gulp.task('jsMinify', ['js'], function () {
101
    return gulp.src('dist/js/ui.js')
102
        .pipe($.sourcemaps.init())
103
        .pipe($.uglify())
104
        .pipe($.rename({'suffix': '.min'}))
105
        .pipe($.sourcemaps.write('.'))
106
        .pipe(gulp.dest('dist/js'))
107
});
108
109
// css文件编译
110
gulp.task('css', function () {
111
    return gulp.src(['src/less/ui.less'])
112
        .pipe($.plumber({
113
            errorHandler: function (err) {
114
                // 处理编译less错误提示  防止错误之后gulp任务直接中断
115
                console.log(err);
116
                this.emit('end');
117
            }
118
        }))
119
        .pipe($.sourcemaps.init())
120
        .pipe($.less())
121
        .pipe($.autoprefixer({
122
            browsers: [
123
                'Android >= 4',
124
                'Chrome >= 40',
125
                'last 6 Firefox versions',
126
                'iOS >= 6',
127
                'Safari >= 6']
128
        }))
129
        .pipe($.sourcemaps.write('.'))
130
        .pipe(gulp.dest('dist/css'));
131
});
132
133
gulp.task('cssMinify', ['css'], function () {
134
    return gulp.src('dist/css/ui.css')
135
        .pipe($.sourcemaps.init())
136
        .pipe($.cssnano())
137
        .pipe($.rename({'suffix': '.min'}))
138
        .pipe($.sourcemaps.write('.'))
139
        .pipe(gulp.dest('dist/css'));
140
});
141
142
// font图标字体拷贝
143
gulp.task('font', function () {
144
    return gulp.src('src/fonts/*')
145
        .pipe(gulp.dest('dist/font'))
146
});
147
148
// 文件变化监听,更新编译文件
149
gulp.task('watch', function () {
150
    gulp.watch(['src/js/*'], ['jsMinify']);
151
    gulp.watch(['src/fonts/*'], ['font']);
152
    gulp.watch(['src/less/*'], ['cssMinify']);
153
});
154
155
// 静态服务器, 自动监听文件变化,更新页面
156
gulp.task('server', ['watch'], function () {
157
    browserSync.init({
158
        server: {
159
            baseDir: ["demo", "dist"],
160
        },
161
        open: false,    // 不自动打开浏览器
162
        port: 3000      // default port
163
    });
164
    return gulp.watch(["./demo/**", "./dist/**"])// 监听文件变化,刷新浏览器
165
        .on("change", browserSync.reload);
166
});
167
168
// build
169
gulp.task('build', ['clean'], function (cb) {
170
    $.sequence(['font', 'cssMinify', 'jsMinify'], cb);
171
});
172
173
// default server
174
gulp.task('default', function (cb) {
175
    $.sequence(['build'], ['server'], cb);
176
});
177
```
178
179
#### 代码介绍 ####
180
```js
181
require(xx)
182
```
183
用来引用其它js文件,或其它库(node_modules目录下的),其它都是普通js语法
184
185
```js
186
gulp.task('taskname',[deptask1, deptask2,..], function(){
187
    //task script
188
})
189
```
190
gulp任务定义的一般格式
191
taskname任务名称,
192
[deptask1, deptask2,..]可选参数,定义此任务的依赖任务
193
function(){..} 定义任务脚本
194
195
#### 库说明(在package.json文件查看到) ####
196
```
197
    "browser-sync": "^2.13.0",      // 浏览器刷新
198
    "gulp": "^3.9.1",               // gulp插件
199
    "gulp-autoprefixer": "^3.1.0",  // 自动为css代码添加浏览器前缀
200
    "gulp-clean": "^0.3.2",         // 文件删除
201
    "gulp-concat": "^2.6.0",        // 文件合并
202
    "gulp-cssnano": "^2.1.2",       // css文件压缩
203
    "gulp-jshint": "^2.0.1",        // js文件静态语法错误检查
204
    "gulp-less": "^3.1.0",          // less文件编译成css
205
    "gulp-load-plugins": "^1.2.4",  // gulp插件,减少加载文件代码
206
    "gulp-plumber": "^1.1.0",       // 处理less编译错误,导致watch任务中断
207
    "gulp-rename": "^1.2.2",        // 文件重命名
208
    "gulp-sequence": "^0.4.5",      // 设置文件执行顺序(gulp多个依赖任务间执行默认为并行)
209
    "gulp-sourcemaps": "^1.6.0",    // 生成文件映射,在合并和编译压缩时,通过文件映射文件找到原代码位置
210
    "gulp-uglify": "^1.5.4",        // js文件压缩
211
    "gulp-util": "^3.0.7",          // gulp工具类,可用来输出日志信息
212
```
213
214
大部分插件使用都比较简单,默认配置即可,有特殊要求时,可查看插件介绍了解相关配置
215
216
217
218
#### gulp补充 ####
219
一些未涉及的任务,如图片压缩,js单元测试,js代码风格检查,
220
还有js代码检查涉及很多配置,未进行详细了解
221
222
#### gulp的坑:任务顺序 ####
223
224
225
你的任务是否在这些前置依赖的任务完成之前运行了?
226
请一定要确保你所依赖的任务列表中的任务都使用了正确的异步执行方式:
227
使用一个 callback,或者返回一个 promise 或 stream。
228
如果不是这样返回,会导致任务和依赖任务一起并行执行的情况
229
230
231
callback的方式,task方法最一个函数传入一个函数参数cb,在任务完成后,调用这个cb表示这个任务执行完毕
232
```js
233
// 在 shell 中执行一个命令
234
var exec = require('child_process').exec;
235
gulp.task('jekyll', function(cb) {
236
  // 编译 Jekyll
237
  exec('jekyll build', function(err) {
238
    if (err) return cb(err); // 返回 error
239
    cb(); // 完成 task
240
  });
241
});
242
```
243
stream  gulp.src或gulp.dest,gulp.pipe目前的返回应该就是stream
244
245
```js
246
gulp.task('somename', function() {
247
  var stream = gulp.src('client/**/*.js')
248
    .pipe(minify())
249
    .pipe(gulp.dest('build'));
250
  return stream;
251
});
252
```
253
254
promise
255
```js
256
var Q = require('q');
257
258
gulp.task('somename', function() {
259
  var deferred = Q.defer();
260
261
  // 执行异步的操作
262
  setTimeout(function() {
263
    deferred.resolve();
264
  }, 1);
265
266
  return deferred.promise;
267
});
268
```
269
270
多个依赖任务执行顺序
271
看网上介绍4.0,gulp有对任务顺序进行处理了,不过现在版本还是不方便,依赖的多个任务之间没有
272
明确执行顺序
273
可以使用gulp-sequence, 处理,其可接收多个参数,将有顺序依赖的任务放到不同数组中
274
275
```js
276
gulp.task('default', function (cb) {
277
    $.sequence(['build'], ['server'], cb);
278
});
279
```
280
281
#### gulp的坑:任务错误处理 ####
282
有时因为脚本配置的因素,文件路径写错了导致文件未真正打包,但任务不会报错执行成功
283
使用gulp.watch时,如触发的任务执行失败,会导致watch不再触发
284
    例如,监听less文件变更时,执行编任务,若编译失败,监听程序好像就退出了,文件再变动时,
285
不会再触发编译任务,使用gulp-plumber可处理此问题,具体见css任务脚本
286
若监听文件被删除,也会出现上面问题,暂未找到解决方案,还是库的问题
287
288
289
290
// zepto.js 下自官网http://zeptojs.com/,版本v1.2.0
291
// require.js

+ 189 - 0
gulpfile.js

@ -0,0 +1,189 @@
1
//  编译js文件,打包发布
2
//  编译css文件,打包发布
3
//  启动http服务,js,css监听
4
5
'use strict';
6
var $, gulp, browserSync;
7
gulp = require('gulp');
8
$ = require('gulp-load-plugins')();
9
browserSync = require('browser-sync').create();
10
11
// js定义文件顺序
12
var jsArray = [
13
];
14
15
// js文件清理
16
gulp.task('jsClean', function () {
17
    return gulp.src(['dist/js/'], {read: false})
18
        .pipe($.clean())
19
});
20
// css文件清理
21
gulp.task('cssClean', function () {
22
    return gulp.src(['dist/css/'], {read: false})
23
        .pipe($.clean())
24
});
25
26
// font文件清理
27
gulp.task('fontClean', function () {
28
    return gulp.src(['dist/font/'], {read: false})
29
        .pipe($.clean())
30
});
31
32
// 历史清理
33
gulp.task('clean', ['fontClean', 'jsClean', 'cssClean'], function (cb) {
34
    cb();
35
});
36
37
// js语法检查
38
gulp.task('lint', function () {
39
    return gulp.src('src/js/*')
40
        .pipe($.jshint())
41
        .pipe($.jshint.reporter('default'));
42
});
43
44
// js文件编译
45
gulp.task('js', ['lint'], function () {
46
    return gulp.src('src/js/*')
47
        .pipe($.sourcemaps.init())
48
       //.pipe($.concat('ui.js'))
49
        //.pipe($.sourcemaps.write('.'))
50
        .pipe(gulp.dest('dist/js'))
51
        .pipe(gulp.dest('demo/js/lib/ipu/'));
52
});
53
54
gulp.task('jsMinify', ['js'], function () {
55
    return ;// 暂无必要
56
    return gulp.src(['dist/js/*.js', '!dist/js/*.min.js'])
57
        .pipe($.sourcemaps.init())
58
        .pipe($.uglify())
59
        .pipe($.rename({'suffix': '.min'}))
60
        .pipe($.sourcemaps.write('.'))
61
        .pipe(gulp.dest('dist/js'))
62
});
63
64
// css文件编译
65
gulp.task('css', function () {
66
    return gulp.src(['src/less/ipu.less'])
67
        .pipe($.plumber({
68
            errorHandler: function (err) {
69
                // 处理编译less错误提示  防止错误之后gulp任务直接中断
70
                console.log(err);
71
                this.emit('end');
72
            }
73
        }))
74
        .pipe($.sourcemaps.init())
75
        .pipe($.less())
76
        .pipe($.autoprefixer({
77
            browsers: [
78
                'Android >= 4',
79
                'Chrome >= 40',
80
                'last 6 Firefox versions',
81
                'iOS >= 6',
82
                'Safari >= 6']
83
        }))
84
        .pipe($.sourcemaps.write('.'))
85
        .pipe(gulp.dest('dist/css'))
86
        .pipe(gulp.dest('demo/css'));
87
});
88
89
gulp.task('cssCompile', function () {
90
    return gulp.src(['src/less/*.less'])
91
        .pipe($.plumber({
92
            errorHandler: function (err) {
93
                // 处理编译less错误提示  防止错误之后gulp任务直接中断
94
                console.log(err);
95
                this.emit('end');
96
            }
97
        }))
98
        .pipe($.sourcemaps.init())
99
        .pipe($.less())
100
        .pipe($.autoprefixer({
101
            browsers: [
102
                'Android >= 2.3',
103
                'Chrome >= 40',
104
                'last 6 Firefox versions',
105
                'iOS >= 6',
106
                'Safari >= 6']
107
        }))
108
        .pipe($.sourcemaps.write('.'))
109
        .pipe(gulp.dest('dist/css'))
110
        .pipe(gulp.dest('demo/css'));
111
});
112
113
gulp.task('cssMinify', ['css'], function () {
114
    return gulp.src('dist/css/ipu.css')
115
        .pipe($.sourcemaps.init())
116
        .pipe($.cssnano())
117
        .pipe($.rename({'suffix': '.min'}))
118
        .pipe($.sourcemaps.write('.'))
119
        .pipe(gulp.dest('dist/css'))
120
        .pipe(gulp.dest('demo/css'));
121
});
122
123
// font图标字体拷贝
124
gulp.task('font', function () {
125
    return gulp.src('src/font/*')
126
        .pipe(gulp.dest('dist/font'))
127
        .pipe(gulp.dest('demo/font'))
128
});
129
130
// demo html文件编译
131
gulp.task('demo', function(){
132
    return gulp.src('src/html/**/*.*');
133
    /*
134
        .pipe($.injectString.replace('ipu-', 'ipu-'))
135
        .pipe(gulp.dest('./test'));
136
137
    gulp.watch("dist/css/**").on("change", function(){
138
139
    }).on("add", function(){
140
141
    });
142
     */
143
});
144
145
// 文件变化监听,更新编译文件
146
gulp.task('watch', function () {
147
    gulp.watch(['src/fonts/*'], ['font']);
148
    gulp.watch(['src/less/**'], ['cssMinify']);
149
    //gulp.watch(['src/js/*'], ['jsMinify']);
150
151
    // js单个文件拷贝
152
    gulp.watch(['src/js/*'], function(e){
153
        console.log(e);
154
        gulp.src(e.path)
155
            .pipe(gulp.dest('dist/js'))
156
            .pipe(gulp.dest('demo/js/lib/ipu/'));
157
    });
158
159
    // html单个文件拷贝
160
    gulp.watch(['demo/src/**.html'],function(e){
161
        console.log(e);
162
        gulp.src(e.path)
163
        .pipe($.injectString.replace('ipu-', 'ipu-'))
164
        .pipe(gulp.dest('demo'));
165
    });
166
});
167
168
// 静态服务器, 自动监听文件变化,更新页面
169
gulp.task('server', ['watch'], function () {
170
    browserSync.init({
171
        server: {
172
            baseDir: ["demo"],
173
        },
174
        open: false,    // 不自动打开浏览器
175
        port: 3000      // default port
176
    });
177
    return gulp.watch(["./demo/**"])// 监听文件变化,刷新浏览器
178
        .on("change", browserSync.reload);
179
});
180
181
// build
182
gulp.task('build', ['clean'], function (cb) {
183
    $.sequence(['font', 'cssMinify', 'js'], cb);
184
});
185
186
// default server
187
gulp.task('default', function (cb) {
188
    $.sequence(['build'], ['server'], cb);
189
});

+ 32 - 0
package.json

@ -0,0 +1,32 @@
1
{
2
  "name": "frame",
3
  "version": "1.0.0",
4
  "description": "",
5
  "main": "gulp.js",
6
  "scripts": {
7
    "test": "echo \"Error: no test specified\" && exit 1"
8
  },
9
  "author": "",
10
  "license": "ISC",
11
  "devDependencies": {
12
    "browser-sync": "^2.13.0",
13
    "gulp": "^3.9.1",
14
    "gulp-autoprefixer": "^3.1.0",
15
    "gulp-clean": "^0.3.2",
16
    "gulp-concat": "^2.6.0",
17
    "gulp-cssnano": "^2.1.2",
18
    "gulp-jshint": "^2.0.1",
19
    "gulp-less": "^3.1.0",
20
    "gulp-load-plugins": "^1.2.4",
21
    "gulp-plumber": "^1.1.0",
22
    "gulp-rename": "^1.2.2",
23
    "gulp-sequence": "^0.4.5",
24
    "gulp-sourcemaps": "^1.6.0",
25
    "gulp-uglify": "^1.5.4",
26
    "gulp-util": "^3.0.7",
27
    "jshint": "^2.9.3"
28
  },
29
  "dependencies": {
30
    "gulp-inject-string": "^1.1.0"
31
  }
32
}