kissy使用小结(1)工程构建工具bee
1.npm install yo gulp -g
2.npm install generator-bee -g脚手架工具bee依赖于yeoman
3.项目文件夹下运行yo bee,将自动生成kissy的bee-demo文件目录
或者访问https://github.com/minghe/bee-demo下载bee-demo项目
使用yo bee生成的文件目录没法正确执行npm install命令,github上下载的可以???
4.npm install根据package.json下载需要的node插件
5.运行gulp压缩编辑js、css文件,通过gulp-kmc将启动本地端的server服务,默认的访问地址在http://localhost:5555,只能访问build目录下的js、css文件
注解
1.package.json配置文件载入Node模块
{
"name": "cms",
"version": "1.0.0",
"description": "this is an kissy bee project",
"main": "index.js",
"devDependencies": {
"bufferstreams": "0.0.2",
"gulp": "^3.9.0",
"gulp-copy": "0.0.2",
"gulp-filter": "^3.0.1",
"gulp-kclean": "^1.0.5",
"gulp-kmc": "^1.0.33",
"gulp-less": "^3.0.3",
"gulp-mini-css": "0.0.3",
"gulp-minify": "0.0.5",
"gulp-minify-css": "^0.3.11",
"gulp-rename": "^1.2.2",
"gulp-uglify": "^1.0.1",
"gulp-util": "^3.0.0",
"gulp-xtemplate": "^1.2.2",
"memory-cache": "0.0.5",
"xtemplate": "3.3.3"
}
}
参考
package.json字段全解http://blog.csdn.net/woxueliuyun/article/details/39294375
npm命令概述http://realwall.cn/blog/?p=120
常用npm命令http://my.oschina.net/robinjiang/blog/168732
2.glupfile.js配置gulp工作流
var gulp = require('gulp');
var kmc = require('gulp-kmc');
var less = require('gulp-less');
var css = require('gulp-mini-css');
var kclean = require('gulp-kclean');
var rename = require("gulp-rename");
var filter = require('gulp-filter');
var minify = require('gulp-minify');
var XTemplate = require('xtemplate');
var gulpXTemplate = require('gulp-xtemplate');
var path = require('path'); //node内置路径模块
var fs = require('fs'); //node内置文件模块
var src = "./src",
dest = "./build";
//包配置
var pkg = "bee-demo";
var comboSuffix = '-combo';
kmc.config({
packages:[{
name: pkg,
base: src
}]
});
kmc.server({ //开启本地服务器
port:5555,
fixModule:true,
path: dest,
kissy:true
});
var dirs = fs.readdirSync(src); //同步读取文件目录
var kissyFiles = [];
dirs.forEach(function(i){
var stat = fs.statSync(path.join(src,i)); //拼接路径,获取文件信息
//排除非版本号目录
if(stat.isFile()&&new RegExp(/.*\.js/).test(i)){
kissyFiles.push(i);
}
});
//使用kmc合并并编译kissy模块文件
function renderKmc(fileName){
var comboFiles = fileName.map(function(name){
return {
src: pkg+"/"+name+".js",
dest: name + comboSuffix+".js"
};
});
var cleanFiles = fileName.map(function(name){
return {
src:name+comboSuffix+'.js',
outputModule:pkg+'/'+name
};
});
return gulp.src([src+'/**/*.js']) //gulp.src待处理文件
//转换cmd模块为kissy模块
.pipe(kmc.convert({ //pipe方法由stream提供,不属于gulp,流水线处理
kissy: true,
ignoreFiles: ['-min.js']
}))
//合并文件
.pipe(kmc.combo({
deps:'deps.js',
files:comboFiles
}))
//优化代码
.pipe(kclean({
files:cleanFiles
}))
.pipe(minify())
.pipe(filter(function(file){
var files = fileName.map(function(name){
return name+comboSuffix+'.js';
});
return files.indexOf(file.relative) == -1;
}))
.pipe(rename(function(file){
fileName.forEach(function(name){
file.basename = file.basename.replace(name+comboSuffix+'-min',name+'-min');
})
}))
.pipe(gulp.dest(dest)); //gulp.dest处理后的文件存放点
}
gulp.task('kmc', function() { //gulp.task约定任务
return renderKmc(kissyFiles);
});
gulp.task('mini-css', function(){
return gulp.src([src+'/**/*.css'])
.pipe(gulp.dest(dest))
.pipe(css({ext:'-min.css'}))
.pipe(gulp.dest(dest));
});
gulp.task('less', function(){
return gulp.src([src+'/**/*.less'])
.pipe(less())
.on('error',function(e){
console.log(e);
})
.pipe(gulp.dest(src));
});
gulp.task('css',['less','mini-css']);
gulp.task('xtpl',function(){
return gulp.src(src+'/**/*.xtpl')
.pipe(gulpXTemplate({
wrap: 'kissy',
XTemplate: XTemplate,
renderJs: 'none'
}))
.on('error',function(e){
console.log(e);
})
.pipe(gulp.dest(src));
});
gulp.task('watch', function() {
gulp.watch(src+'/**/*.xtpl', ['xtpl']);
gulp.watch(src+'/**/*.less', ['css']);
});
gulp.task('default', ['kmc','css','watch']);
/*
kmc.conver编译由cmd规范编写的代码,参数为对象
modulex:true更换成符合kissy5.0.0原则的代码
kissy:true更换成符合KMD规范的代码
define:true更换成用define包裹的代码,符合seajs书写规范
ignoreFile:[‘-min.js’]配置需要忽略的文件
示例:kmc.convert({
kissy: true,
ignoreFiles: ['-min.js']
})
kmc.combo动态合并js文件,参数是对象
files值为数组,src文件的来源,dest文件的最后归属,依赖于kmc.config配置的包名和src文件的来源信息
deps值为字符串,通常为deps.js,以KISSY.config函数设置了文件之间的依赖
示例:kmc.config({
packages:[{
name:’bee-demo’,
base:’./src’
}]
]};
kmc.combo({
files:[{
src:’bee-demo/index.js’,
dest:’index-combo.js’
}],
deps:’deps.js’
})
最终将生成如下的依赖表文件
KISSY.config(modules,{
‘mod-a’:{
requires:[‘mod-b’,’mod-c’]
}
})
或者如下的依赖表文件
KISSY.config(‘requires’{
‘mod-a’:[‘’mod-b,’mod-c’]
})
kclean为合并后的文件提升起见,用单字母简化传递的模块参数和require函数 */
/*
gulp.src通过Node-golb模块获取本地文件,返回可以传递给插件的数据流
*.js匹配所有js文件
js/**/*.js匹配js目录下所有的js文件
!app.js不包含app.js文件
*.+(js|css)匹配js或css文件
gulp.dest处理后文件的存放点,该方法需要放置在pipe流中
.pipe实现流水线操作
gulp.task(‘task-name’,function(){})定义任务,命令行输入gulp task-name启动该任务
default默认执行的人物,命令行输入gulp即启动
gulp.watch(‘js/*.js’,[‘task-name’])监听文件,并执行相应的任务
watcher.on(‘change’,function(){})通过绑定事件的方法输出监听信息 */
参考
Gulp开发教程http://www.w3ctech.com/topic/134
Gulp开发指南http://www.techug.com/gulp
慕课网玩转kissy框架http://www.imooc.com/code/4488