ididi
Version:
225 lines (202 loc) • 4.97 kB
JavaScript
var fis = module.exports = require('fis');
var preprocessor = require('./plugin/preprocessor/main.js');
fis.cli.name = 'ididi';
fis.cli.info = fis.util.readJSON(__dirname + '/package.json');
fis.cli.version = require('./version.js');
fis.require.prefixes = ['didi', 'fis'];
fis.cli.help.commands = [ 'release', 'install', 'server', 'init', 'preview' ];
var releaseDir = '/static/release/';
var parser = {
//.tmpl后缀的文件使用fis-parser-utc插件编译
tmpl: 'utc',
css: 'less',
less: 'less'
};
var postprocessor = {
js: 'jswrapper,require-async',
html: "require-async",
tpl: "require-async",
};
var postpackager = ['autoload'];
var spriter = 'csssprites';
var optimizer = {tpl: 'html-minifier'};
var server = {
rewrite: true,
libs: 'rewrite,smarty,didi-component/didi-server',
type: 'php',
clean: {
exclude: "fisdata**,smarty**,rewrite**,index.php**,WEB-INF**,combo**"
}
}
var componentsRoadmap = [
{
//component_modules文件夹下的css类型文件,以之后的后缀为id
reg: /^\/component_modules\/(.*)\.(styl|less|css)$/i,
id: '$1.css',
useSprite: true,
isMod: true,
release: '${releaseDir}/$&'
},
//component_modules下的下划线开头的文件夹或者文件都不模块化包裹
{
reg: /^\/component_modules(\/[^\/]+)*\/_[^\/]+(\/[^\/]+)*\.js$/,
isMod: false,
release: '${releaseDir}$0',
},
//component_modules下面的js文件(其他地方会自动处理入口js文件),以之后的后缀为id
{
reg: /^\/component_modules\/(.*\.js)$/i,
id: '$1',
isMod: true,
release: '${releaseDir}/$&'
},
//component文件夹下的css类型文件,以之后的后缀为id
{
reg: /^\/components\/(.*)\.(styl|less|css)$/i,
id: '$1.css',
useSprite: true,
isMod: true,
release: '${releaseDir}/$&'
},
//component文件夹下的入口js文件以模块名称作为id
{
reg: /^\/components\/([^\/]+)\/\1\.js$/i,
id: '$1',
isMod: true,
release: '${releaseDir}/$&'
},
//component下的下划线开头的文件夹或者文件都不模块化包裹
{
reg: /^\/components(\/[^\/]+)*\/_[^\/]+(\/[^\/]+)*\.js$/,
isMod: false,
release: '${releaseDir}$0',
},
//component_modules下面的其他js文件(入口js文件除外),以之后的后缀为id
{
reg: /^\/components\/(.*\.js)$/i,
id: '$1',
isMod: true,
release: '${releaseDir}/$&'
}
];
var roadmap = [
// 配置本地 url 模拟转发
{
reg: 'rewrite.conf',
release: '/server-conf/rewrite.conf'
},
// mock 数据文件夹
{
reg: '/mock/**',
useCompile: false,
release: '$&'
},
{
reg: 'proxy.php',
useCompile: false,
release: '/proxy.php'
},
//测试数据
{
reg: /\/test\/([^\/]+)\/main\.php/,
isMod: false,
release: 'test/$1.php'
},
//将main.html作为所在文件夹的名称发不到page目录下
{
reg: /\/page\/([^\/]+)\/main\.html/,
isMod: true,
release: 'page/$1.html'
},
{
//lib文件夹下的文件不做模块化处理
reg: 'lib/**.js',
release: '${releaseDir}$&',
isMod: false,
}, {
// 下划线开头的文件,或者下划线开头的文件夹中的文件不作为mod处理,支持非模块化js,求同存异
reg: /(\/[^\/]+)*\/_[^\/]+(\/[^\/]+)*\.js$/,
release: '${releaseDir}$0',
isMod: false
},
//其他js是模块化处理
{
reg: '**.js',
release: '${releaseDir}$&',
isMod: true
},
//其他css是模块化处理
{
reg: '**.css',
release: '${releaseDir}$&',
isMod: true
},
//模板文件不压缩且不发布
{
reg: '**tmpl',
useOptimizer: false,
release: false,
isJsLike: true
},
{
reg: /.+?(png|jpeg|jpg|gif)$/,
release: '${releaseDir}$&',
},
//字体发布
{
reg: /.+\.(svg|eot|ttf|woff)$/,
release: "${releaseDir}/$&"
},
];
var smartyRoadmap = [
//将main.tpl作为所在文件夹的名称发布到template目录下
{
reg: /\/template\/([^\/]+)\/main\.tpl/,
isMod: true,
release: 'template/$1.tpl'
},
{
reg: "smarty.conf"
}
];
var roadmapPath = componentsRoadmap.concat(roadmap.concat(smartyRoadmap));
var argv = process.argv;
var isPreview = !(~argv.indexOf('-d') || ~argv.indexOf('--dest'));
// auto generate smarty.conf
if (isPreview) {
postpackager.push(require('./plugin/postpackager/smarty-config.js'));
}
// fis.config.set('roadmap.path', roadmapPath);
fis.config.merge({
releaseDir: releaseDir,
roadmap: {
path: roadmapPath
},
//各个流程的配置
modules: {
parser: parser,
postprocessor: postprocessor,
postpackager: postpackager,
spriter: spriter,
optimizer: optimizer
},
settings: {
postprocessor: {
jswrapper: {
type: 'amd'
}
},
postpackager: {
autoload: {
useInlineMap: true,
// include: '/page/**',
optDeps: false
}
}
},
server: server
});
fis.config.set('modules.preprocessor', {});
fis.config.set('modules.preprocessor.css', [preprocessor.CSS]);
fis.config.set('modules.preprocessor.js', [preprocessor.JS]);
fis.config.set('modules.preprocessor.html', [preprocessor.HTML]);