kissy工程构建工具bee
①npm install yo gulp -g,bee通过yoeman安装,gulp作为压缩打包工具
②npm install generator-bee -g
③yo bee(项目文件夹下运行),将自动生成工程目录,以及package.json配置文件(依赖的node模块)、gulpfile.js(gulp的工作流)
Build存放压缩合并后的css、js文件,src为源码,demo存放html文件
yo bee生成项目文件夹没法正确执行npm install命令,github上下载的bee-demo可以正确执行,原因不明???
④npm install根据package.json的devDenpendencies项安装依赖的node模块
⑤gulp默认启动gulp-kmc、gulp-less、gulp-min-css按KMD规范编译js、less文件及压缩css文件等,并且实时监控,同时开启本地的server以便调试(由gulp-kmc提供),默认的访问地址为http://localhost:5555,默认只提供build文件夹下内容的访问,即http://localhost:5555/index.js
注解:
①package.json配置文件,供npm读取配置信息,使用npm install命令即可安装依赖的模块
{
"name": "cms",
"version": "1.0.0",
"description": "this is an kissy bee project",
"main": "index.js",
"devDependencies": {//指定依赖的包
"bufferstreams": "0.0.2",
"gulp": "^3.8.7",
"gulp-copy": "0.0.2",
"gulp-filter": "^1.0.2",
"gulp-kclean": "1.0.3",
"gulp-kmc": "1.0.27",
"gulp-less": "^1.3.5",
"gulp-mini-css": "0.0.3",
"gulp-minify": "0.0.5",
"gulp-minify-css": "^0.3.11",
"gulp-rename": "^1.2.0",
"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
②glupfile.js前端构建工具的配置文件
var gulp = require('gulp'); //以node模块的方式加载模块
var kmc = require('gulp-kmc'); //编译js文件,将CMD规范书写的代码编译成KMD规范
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 root = process.cwd(); //返回进程当前的工作目录
//包配置
var pkg = path.basename(root);
var comboSuffix = '-combo';
kmc.config({
packages:[{
name: pkg,
base: src
}]
});
kmc.server({
port:5555,
fixModule:true, //是否修复模块,默认false,执行效率更高
path: dest,
kissy:true
});
var dirs = fs.readdirSync(src);//同步读取文件目录
var kissyFiles = [];
dirs.forEach(function(i){
var stat = fs.statSync(path.join(src,i)); //同步获取文件信息,先用path拼接路径
//排除非版本号目录
if(stat.isFile()&&new RegExp(/.*\.js/).test(i)){
i = i.replace('.js','');
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()) //运行gulp-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.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']);
参考
Gulp开发教程http://www.w3ctech.com/topic/134
Gulp使用指南http://www.techug.com/gulp