Kissy Module Compiler(Grunt-KMC)
Grunt-kmc 依赖 kmc,kmc 使用指南。
环境依赖:Node,Grunt。
环境准备
Grunt-kmc 依赖 Grunt ~0.4.1
。如果你未曾安装grunt,参照这里安装Grunt,学习如何写Gruntfile。熟悉以上内容后,可以这样来安装grunt-kmc插件:
npm install grunt-kmc --save-dev
打开你创建的Gruntfile,并添加代码:
grunt.loadNpmTasks('grunt-kmc');
KMC
任务配置
在项目的Gruntfile文件中,在grunt.initConfig()
函数参数的JSON对象中,添加一段名为kmc
的段落。
grunt.initConfig({
kmc: {
options: {
// 任务配置项,更多配置项请参照这里:
// https://github.com/daxingplay/ModuleCompiler
},
your_target: {
// 目标任务,定义文件筛选规则
}
}
})
配置项
options.packages
类型:Array
,默认值:[]
,KISSY 包配置。
options.charset
类型:String
,默认值:utf-8
,
options.comboOnly
类型:Boolean
,默认值:false
,当指定某个文件为入口进行解析时,只生成这个文件的依赖Map,不作静态合并
options.depFilePath
类型:String
,默认值:""
,依赖关系表存放的文件路径
options.depFileCharset
类型:String
,默认值:和options.charset 保持一致,依赖关系表存放的文件的编码类型
options.traverse
类型:Boolean
,默认值:false
,当指定模个文件为入口文件时,遍历子目录进行构建
options.comboMap
类型:Boolean
,默认值:false
,当指定一批文件为源文件时,对这些文件只生成模块依赖关系表,存放于options.depFilePath
中
示例代码
示例1
入口为单个文件,将这个文件的依赖关系解析好后合并入另一个文件
grunt.initConfig({
kmc: {
main:{
options: {
packages: [
{
name: 'test',
path: 'assets/src',
charset: 'gbk'
}
]
},
files: [{
src: 'assets/src/test/index.js',
dest: 'assets/dist/test/index.combo.js'
}]
}
}
});
详细配置项请参照kmc首页。
示例2
入口为一批文件,每个文件都解析合并
grunt.initConfig({
kmc: {
options: {
packages: [
{
name: 'pkg-name',
path: '../',
charset:'utf-8'
}
],
// 将 ModuleName 中的 `src` 去掉
map: [['pkg-name/src/', 'pkg-name/']]
},
main: {
files: [
{
// 这里指定项目根目录下所有文件为入口文件
expand: true,
cwd: 'src/',
src: [ '**/*.js', '!Gruntfile.js'],
dest: 'build/'
}
]
}
}
});
示例3
入口为一批文件,每个文件都解析合并,包名从配置文件中读取
grunt.initConfig({
// 读取`abc.json配置文件中的配置`
pkg: grunt.file.readJSON('abc.json'),
kmc: {
options: {
packages: [
{
name: '<%= pkg.name %>',
path: '../',
charset:'utf-8'
}
],
// 将 ModuleName 中的 `src` 去掉
map: [['<%= pkg.name %>/src/', '<%= pkg.name %>/']]
},
main: {
files: [
{
// 这里指定项目根目录下所有文件为入口文件
expand: true,
cwd: 'src/',
src: [ '**/*.js', '!Gruntfile.js'],
dest: 'build/'
}
]
}
}
});
其中 abc.json 文件内容如下:
{
"name": "my-custom-package-name",
}
示例4
只生成模块依赖关系表,对源文件不做修改
grunt.initConfig({
options: {
packages: [
{
name: 'h5-test',
path: '../',// 可以省略
charset:'utf-8'
}
],
// 生成模块依赖关系表
depFilePath:'build/mods.js',
comboMap:true
},
main: {
files: [
{
src: 'src/**/*.js',
dest: 'build/'
}
]
}
});
仅这样做通常是不够的,源文件需要手动补全模块名,比如
KISSY.add('h5-test/abc/index',function(S){});
另外此功能还需配合Copy插件一起完成。