|
| 1 | +# ModuleCompiler |
| 2 | + |
| 3 | +[](http://travis-ci.org/daxingplay/ModuleCompiler) |
| 4 | + |
| 5 | +[](http://badge.fury.io/js/kmc) |
| 6 | + |
| 7 | +## 简介 |
| 8 | + |
| 9 | +KISSY Module Compiler(kmc)是一个基于NodeJS的KISSY模块打包工具,目前适用于KISSY 1.2+的代码打包 |
| 10 | + |
| 11 | +## 特点 |
| 12 | + |
| 13 | +- 支持GruntJS,参见[grunt-kmc](https://github.com/daxingplay/grunt-kmc). |
| 14 | +- 基于NodeJS,相比于KISSY自带的Java工具,打包快速 |
| 15 | +- 参照浏览器端的KISSY的config进行配置,无需额外知识,只需要改一下包路径即能快速打包 |
| 16 | +- 支持混合编码打包,不同的包可以使用不同的编码 |
| 17 | +- 支持GBK输出 |
| 18 | +- 支持KISSY 1.3的自动combo功能,可以生成依赖关系文件 |
| 19 | +- 提供底层依赖分析接口,方便集成到其他工具当中 |
| 20 | +- 支持map功能,可以使用正则自由替换输出的模块名 |
| 21 | + |
| 22 | +## 版本说明 |
| 23 | + |
| 24 | +- 0.0.7版本适用于KISSY 1.2、1.3的打包,目前已经在淘宝多个业务广泛使用,单纯打包没有任何问题,但是不具备依赖分析生成功能,此版本已经不再维护,推荐使用新版本。 |
| 25 | +- 1.0.0版本开始支持KISSY 1.3的自动combo功能,推荐使用 |
| 26 | + |
| 27 | +## 使用 |
| 28 | + |
| 29 | +### 安装 |
| 30 | + npm install kmc |
| 31 | + |
| 32 | +or |
| 33 | + |
| 34 | + git clone git://github.com/daxingplay/ModuleCompiler.git |
| 35 | + |
| 36 | +**注意**: 新版本的KISSY Module Compiler的npm包已经更名为kmc,如果使用老版本(此版已经不再维护),请`npm install module-compiler` |
| 37 | + |
| 38 | +### 编写你的打包脚本 |
| 39 | + |
| 40 | +```js |
| 41 | +var ModuleCompiler = require('module-compiler'); |
| 42 | + |
| 43 | +// 这里和KISSY.config一样,先配置包 |
| 44 | +ModuleCompiler.config({ |
| 45 | + packages: [{ |
| 46 | + 'name': 'sh', |
| 47 | + 'path': '这里建议写绝对路径,即sh这个包所在的目录', |
| 48 | + 'charset': 'gbk' |
| 49 | + }] |
| 50 | +}); |
| 51 | + |
| 52 | +// 将xxx.js打包为xxx.combine.js,输出编码为GBK |
| 53 | +ModuleCompiler.build('xxx.js', 'xxx.combine.js', 'gbk'); |
| 54 | + |
| 55 | +// 用node执行你这个打包脚本就ok啦~ |
| 56 | +``` |
| 57 | + |
| 58 | +### 高级使用指南 |
| 59 | + |
| 60 | +```js |
| 61 | +var ModuleCompiler = require('module-compiler'); |
| 62 | + |
| 63 | +ModuleCompiler.config({ |
| 64 | + // 和KISSY一样,可以配置多个包 |
| 65 | + packages: [{ |
| 66 | + 'name': 'app1', |
| 67 | + 'path': 'app1这个包所在目录的绝对路径', |
| 68 | + // 这里是指app1这个包中的文件的编码,同一个包内的编码请保持一致 |
| 69 | + 'charset': 'gbk' |
| 70 | + }, { |
| 71 | + 'name': 'app2', |
| 72 | + 'path': 'app2这个包所在目录的绝对路径', |
| 73 | + // 这里是指app2这个包源码的编码 |
| 74 | + 'charset': 'utf-8' |
| 75 | + }], |
| 76 | + // 可以设置哪些模块不打包进来。注意,这里exclude的是具体的模块名,支持正则 |
| 77 | + exclude: ['base', 'event'], |
| 78 | + // 如果是对一个目录下的所有文件进行打包,可以设置哪些文件不打包进来,支持正则。注意和上面的exclude的配置的区别。 |
| 79 | + ignoreFiles: ['.combo.js', '-min.js'], |
| 80 | + // 输出的文件名后缀,不带.js,比如打包后你想输出为xxx.combine.js,那么这里就配置为:.combine |
| 81 | + suffix: '', |
| 82 | + // 类似于KISSY的map方法,可以自己定义把模块名中的路径进行替换 |
| 83 | + map: [ |
| 84 | + // 这样配置的话,那么,如果原先输出的app1的模块名中含有app1/2.0/字样的话,就会被替换成app1/19891014/ |
| 85 | + ['app1/2.0/', 'app1/19891014/'] |
| 86 | + ], |
| 87 | + // 这里设置的是最后打包出来的文件的编码,默认UTF-8,这里的设置相当于是全局设置,下面build中的设置是针对单一打包实例的 |
| 88 | + charset: 'gbk' |
| 89 | +}); |
| 90 | + |
| 91 | +/** |
| 92 | + * 打包一个文件/目录 |
| 93 | + * @param inputPath {String} 源文件/目录的绝对路径. |
| 94 | + * @param outputPath {String} 打包出来的文件/目录的路径. |
| 95 | + * @param outputCharset {String} 输出编码,这里的设置会覆盖config.charset中的设置,默认UTF-8 |
| 96 | + * @return {Object} 打包出来的文件信息 |
| 97 | + */ |
| 98 | +ModuleCompiler.build('xxx.js', 'xxx.combine.js', 'gbk'); |
| 99 | +``` |
| 100 | + |
| 101 | +更详细的文档,请参见[wiki](https://github.com/daxingplay/ModuleCompiler/wiki)。 |
| 102 | + |
| 103 | +### API汇总 |
| 104 | + |
| 105 | +* ModuleCompiler.config(cfg):配置包,返回当前所有配置信息。如果不带参数,直接返回当前所有配置信息。 |
| 106 | +* ModuleCompiler.analyze(inputPath):只分析该文件依赖,不打包。 |
| 107 | +* ModuleCompiler.build(inputPath, outputPath, outputCharset, depFilePath):打包函数,具体见wiki |
| 108 | +* ModuleCompiler.combo(inputPath, depFilePath, depFileCharset): 不打包,只生成KISSY 1.3的自动combo依赖文件 |
| 109 | +* ModuleCompiler.clean(): 可以清空config中的设置。因为ModuleCompiler是单例运行,所以如果出现一些特别情况,可以在config前执行clean方法清空之前的配置。 |
| 110 | + |
| 111 | +## CHANGELOG |
| 112 | + |
| 113 | +[版本更新记录](https://github.com/daxingplay/ModuleCompiler/blob/master/HISTORY.md) |
| 114 | + |
| 115 | +## License |
| 116 | +遵守 "MIT":https://github.com/daxingplay/ModuleCompiler/blob/master/LICENSE.md 协议 |
0 commit comments