idt
Version:
Integration Develop Tool For Django Template、PHP Smarty、Java Velocity、Java Freemarker
299 lines (256 loc) • 9.34 kB
JavaScript
/**
* idt配置文件
*/
var path = require( 'path' );
// 当前文件夹路径【无需修改】
var webContent = __dirname;
// web inspector remote 的配置及其使用参看:
// http://people.apache.org/~pmuellr/weinre-docs/latest/Running.html
// debug username, 关闭调试: `off`,如果设置此项,则开启调试,不设置即为`off`关闭
var wsWeinreDebug = '' || 'off';
// default 8080
var weinreDebugPort = '' || '8080';
// default localhost
var weinreDebugHost = '' || 'localhost';
// 执行`build`的时候字符串替换的配置
// 【此项视情况而定】
var replaces = {
exclude: [ '*' ],
include: [ '*.html' ],
replacements: [
// { from: /\#parse\( \"/g, to: '#parse( "tpl/' },
/**
* html中build之后需要忽略的代码段,请使用:
* <!-- idt-build-ignore-start -->
* <!-- idt-build-ignore-end -->
* 进行包裹
*/
{ from: /<!--\s*idt-build-ignore-start\s*-->(.|[\r\n\t])*?<!--\s*idt-build-ignore-end\s*-->/g, to: '' }
]
};
// 二级目录设置【一般不需修改】
var secondary = '';
// build子目录时需要用到【无需修改】
var buildLevel = '';
module.exports = {
// webserver的端口号
webPort: '8003',
// webserver的项目根目录【一般不需修改】,即为当前`pwd`的目录
webContent: webContent,
// 模板引擎根目录【只需要修改最后一个参数即可】
templates: path.join( webContent, secondary, 'velocity' ),
// 模板引擎切换: smarty / django / velocity / freemarker [ 默认velocity ]
/**
* velocity模板引擎采用:
* https://www.npmjs.com/package/velocity
*
* django模板引擎采用'A wrapper of Django's template engine'方式(桥接原理)
* 详见:https://www.npmjs.com/package/django
* 在启用之前请确保python环境已经ready,然后安装django:
* # pip install -v Django==1.7
* //or
* # easy_install "Django==1.7"
*
* smarty模板引擎采用:
* https://www.npmjs.com/package/nsmarty
*
* freemarker模板引擎采用:(桥接原理)
* 在启用之前,请确保java环境,并且需要安装:http://fmpp.sourceforge.net/
* https://www.npmjs.com/package/freemarker.js#readme
*/
tplEngine: 'velocity',
// 反向代理配置【按需配置】,键名可以随意,只要是每一个的匹配规则
reverseProxyMap: {
tpl: {
pattern: /^\/custom\//,
replace: '/tpl/custom/'
}
},
// 单路径整体build【String】
// buildPath: '../outs/outall',
// 多路径整体build【Array】
// buildPath: [ '../outs/o1', '../outs/o2' ],
// 多路径整体build,但是需要资源分离【Object】
buildPath: {
// 键名是需要存留的文件,键值是对应的build路径
'.js': '../outs/outjs',
'.css': '../outs/outcss',
'.jpg|.jpeg|.gif|.png': '../outs/outimg',
'.html|.htm': '../outs/outtemplate',
// template的buildpath直接诶通过templates路径指定
},
// 批处理按照对应的模板文件,生成相同模板,不同静态页面的配置
batch2Html: {
// 指定数据源目录
path: path.join( webContent, 'mock/batch' ),
// 指定静态文件输出目录
out: path.join( webContent, 'mock/batch_out' ),
// 模板路径在上面配置的`template`路径下
tpl: '404.html',
// 数据的data路径是自动生成
// 在 path.join( 'mock/batch', tpl[ 上面的tpl路径去掉.html的文件夹 ] )
},
// 是否对'*.atpl.js'这种请求进行判断【一般不需修改】
// false: 读取'*.atpl'
// true: 读取'*.atpl.js'
wsNoNeed2TrimDotJs: false,
// mock 相关配置【一般不需修改】
mockCommon: 'commonmock/common.js', // 此项会拼接下面的两个前缀路径
mockTemplate: path.join( webContent, secondary, 'mock/html' ),
mockAjax: path.join( webContent, secondary, 'mock/ajax' ),
/**
* web server 中间层
* requester 是一个请求器,可以用来做反向代理等等
*
* @param {Object} connect
* @param {Object} options
* @param {Array} middlewares 系统中间层
* @param {Object} rtool
* {
* requester: 请求器,
* defaulthostp: '默认的本地域名'
* }
* @return {Array} 中间层数组
*/
middlewares: function( connect, options, middlewares, rtool ) {
// how to inject a custom middleware into the array of default
// middlewares
//
// html middlewares example:
//
// middlewares.unshift( function( req, res, next ) {
// if ( utils.isHtml( req ) )
// return handlerHtml.run( req, res, next, config );
// return next();
// } );
middlewares.unshift( function( req, res, next ) {
// 这是一个可以自定义的中间层
console.log( 'user middleware, request url: ' + req.url );
return next();
} );
// 如果需要请求对应的线上数据或者其他域的数据,可以使用 requester 来请求
// requester的使用参见:
// https://www.npmjs.org/package/request
// console.log( rtool.requester, rtool.defaulthostp );
return middlewares;
},
wsWeinreDebug: wsWeinreDebug,
weinreDebugPort: weinreDebugPort,
weinreDebugHost: weinreDebugHost,
// 【无需修改】
input: path.resolve( webContent, buildLevel ),
// 【无需修改】
output: path.resolve( __dirname, '.output', buildLevel ),
// 【无需修改】
replaces: replaces,
// build 处理器配置
getProcessors: function() {
var lessProcessor = new LessCompiler( {
// 【此项先不做配置了】
//
// 在build的时候,没有必要对每一个less都进行编译,因为很可能有一些被import
// 入的less文件会编译出错【不会影响整体样式】,只需在include中写入每一个页面的
// 入口main.less文件即可
//
// exclude: [ '*.less' ],
// include: [
// 'src/center/mine/css/mine.less',
// 'src/custom/search/css/search.less'
// ]
} );
var cssProcessor = new CssCompressor( {
compressOptions: {
keepBreaks: false
}
} );
var html2JsCompilerProcessor = new Html2JsCompiler( {
mode: 'compress',
extnames: [ 'atpl' ],
combine: true,
exclude: [ '*' ],
include: [ '*.atpl' ]
} );
var moduleProcessor = new ModuleCompiler();
var jsProcessor = new JsCompressor();
var pathMapperProcessor = new PathMapper();
var addCopyright = new AddCopyright();
var stringReplace = new StringReplace( replaces );
return {
// 默认的build不需要压缩,以便开发(联调)的时候,利于调试
'default': [ lessProcessor, html2JsCompilerProcessor,
moduleProcessor, pathMapperProcessor,
stringReplace ],
// 在最后联调成功以后,要进行release,会进行代码压缩等处理
'release': [
lessProcessor, cssProcessor, html2JsCompilerProcessor,
moduleProcessor,jsProcessor, pathMapperProcessor,
addCopyright, stringReplace
]
};
},
// build 中需要排除的文件(夹)
exclude: [
'demo',
'Gruntfile.js',
'tests',
'test',
'examples',
'vendor',
'demo',
'tool',
'doc',
'test',
'make',
'module.conf',
'dep/packages.manifest',
'dep/*/*/test',
'dep/*/*/doc',
'dep/*/*/demo',
'dep/*/*/tool',
'dep/*/*/*.md',
'dep/*/*/package.json',
'edp-*',
'.edpproj',
'.svn',
'.git',
'.gitignore',
'.idea',
'.project',
'Desktop.ini',
'Thumbs.db',
'.DS_Store',
'*.tmp',
'*.bak',
'*.swp',
'*.psd',
'copyright.txt',
'package.json',
'README.md',
'mobile',
'idt-config.js',
'idt-config.js.bak',
// pagefooter.html为建立下载模板,build会出错,故排除,但是需要单独处理
'pagefooter.html',
'WEB-INF',
'mock'
],
// 和上面的保持一致就可以,idt单独对其进行copy
idtCopyList: [],
// do not modify
injectProcessor: function( processors ) {
for ( var key in processors ) {
global[ key ] = processors[ key ];
}
}
};
/**
* 在项目根目录执行build,需要在根目录建立一个`module.conf`文件
* 它是用来配置module模块,如下内容的文件:
* {
* "baseUrl": "src",
* "packages": [ ],
* "combine": {
* "abc/def/main": 1
* }
* }
*/