Gruntfile.js _IAM

'use strict';
var fs = require('fs');
module.exports = function (grunt) {
//random code is used for cache issue
var randomCode='';
for(var i=0;i<9;i++){
randomCode += Math.floor(Math.random()*10);
}
//Only if frame_version is defined, new framework UI can be loaded.
var frame_version = grunt.option('frame_version');
if (!frame_version) {
frame_version = '';
} else {
frame_version = '/' + frame_version;
}

// Project configuration.
var target = grunt.option('target');
if (!target) {
target = 'hws';
}
grunt.initConfig({
//css array
cssResources: [],
remoteResource: {
staticResourceServer: "/static/",
frameResourceDir: {
"hws": "framework" + frame_version,
"dt": "framework" + frame_version,
"prc": "framework" + frame_version,
"tlf": "framework" + frame_version,
"tlf_chile": "framework" + frame_version,
"tlf_mexico": "framework" + frame_version,
"tlf_vivo": "framework" + frame_version,
"tlf_global": "framework" + frame_version,
"ocb": "framework" + frame_version,
"ct": "framework" + frame_version,
"cmcc": "framework" + frame_version,
"hk": "framework" + frame_version
},
businessResourceDir: {
"hws": "iamconsole/version",
"dt": "iamconsole/version",
"prc": "iamconsole/version",
"tlf": "iamconsole/version",
"tlf_chile": "iamconsole/version",
"tlf_mexico": "iamconsole/version",
"tlf_vivo": "iamconsole/version",
"tlf_global": "iamconsole/version",
"ocb": "iamconsole/version",
"ct": "iamconsole/version",
"cmcc": "iamconsole/version",
"hk": "iamconsole/version"
}
},
//清空build
clean: {
build_main: ['build/'+target+'/'],
iam_package_main: ["dest/dest/"+target+"/"]
},
//js语法检查
jshint: {
app: {
files: {src: ['src/app/**/*.js', "public/**/*.js"]},
options: {jshintrc: '.jshintrc'}
}
},

//复制
copy: {
main: {
files: [
//公共资源文件iam.common.js,局点定制文件为iam.ext.js
{
cwd: "i18n/common/",
src: ['**', '!**/widgetsLanguage.js', '!**/framework.js'],
dest: 'build/'+target+'/i18n/default/',
expand: true
},
{
cwd: "i18n/"+target+"/",
src: ['**'],
dest: 'build/'+target+'/i18n/default/',
expand: true
},
//公共静态资源
{
cwd: "theme/common/",
src: ['**'],
dest: 'build/'+target+'/theme/default',
expand: true
},
//局点定制的静态资源
{
cwd: "theme/"+target+"/",
src: ['**', '!fonts/*.*', '!images/*.*', '!css/*.css'],
dest: 'build/'+target+'/theme/default',
expand: true
},
{
cwd: "theme/"+target+"/",
src: ['fonts/*.*'],
dest: 'dest/dest/'+target+'/theme/default/',
expand: true
},
{src: ['index.html'], dest: 'build/'+target+'', expand: true},
{src: 'main.js', dest: 'build/'+target+'', expand: true},
{cwd: "src/app/", src: ["business/base/**", "framework/framework.js"], dest: "build/"+target+"/src/app/", expand: true}
]
},
hws: {
files: [
{cwd: "public/default/src", src: ["**"], dest: "build/hws/src/app/business/custom/", expand: true}
]
},
hk: {
files: [
{cwd: "public/hk/src", src: ["**"], dest: "build/hk/src/app/business/custom/", expand: true}
]
},
tlf_chile: {
files: [
{
cwd: "public/tlf/WEB-INF/other/",
src: 'web.xml',
dest: 'dest/dest/tlf_chile/WEB-INF/',
expand: true
},
{
cwd: "theme/"+target+"/",
src: ['fonts/*.*'],
dest: 'dest/dest/'+target+'/theme/movistar/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*",
"!iam/controllers/users/editUserController.js",
"!iam/controllers/users/userListController.js",
"!myCredential/controllers/basicSettingsController.js",
"!myCredential/controllers/modifyCredentialController.js",
"!myCredential/configures/**/*.*",
"!config.js"],
dest: "build/tlf_chile/src/app/business/custom/",
expand: true
},
{
cwd: "public/tlf/src/",
src: ["iam/views/**/*.*", "myCredential/views/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*",
"iam/controllers/users/editUserController.js",
"iam/controllers/accountSetup/warningPolicyController.js",
"iam/controllers/users/userListController.js",
"myCredential/controllers/basicSettingsController.js",
"myCredential/controllers/modifyCredentialController.js",
"myCredential/controllers/modifyAccessVerify.js",
"myCredential/controllers/modifyMcVerify.js",
"myCredential/configures/**/*.*",
"config.js"],
dest: "build/tlf_chile/src/app/business/custom/",
expand: true
}
]
},
tlf: {
files: [
{
cwd: "i18n/tlf_vivo/",
src: ['**', '!**/framework.js', '!**/widgetsLanguage.js','!**/framework.ext.js','!**/framework.common.js'],
dest: 'build/tlf/i18n/default/',
expand: true
},
{
cwd: "theme/tlf_mexico/",
src: ['fonts/*.*'],
dest: 'dest/dest/tlf/theme/movistar',
expand: true
},
{
cwd: "theme/tlf_global/",
src: ['fonts/*.*'],
dest: 'dest/dest/tlf/theme/telefonica',
expand: true
},
{
cwd: "theme/tlf_vivo/",
src: ['fonts/*.*'],
dest: 'dest/dest/tlf/theme/vivo',
expand: true
},
{
cwd: "theme/tlf_vivo/",
src: ['**', '!fonts/*.*', '!images/*.*', '!css/*.css'],
dest: 'build/tlf/theme/default',
expand: true
},
{
cwd: "public/tlf/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/tlf/WEB-INF/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*",
"!iam/controllers/users/editUserController.js",
"!iam/controllers/users/userListController.js",
"!myCredential/controllers/basicSettingsController.js",
"!myCredential/controllers/modifyCredentialController.js",
"!myCredential/configures/**/*.*",
"!config.js"],
dest: "build/tlf/src/app/business/custom/",
expand: true
},
{
cwd: "public/tlf/src/",
src: ["iam/views/**/*.*", "myCredential/views/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*",
"iam/controllers/users/editUserController.js",
"iam/controllers/accountSetup/warningPolicyController.js",
"iam/controllers/users/userListController.js",
"myCredential/controllers/basicSettingsController.js",
"myCredential/controllers/modifyCredentialController.js",
"myCredential/controllers/modifyAccessVerify.js",
"myCredential/controllers/modifyMcVerify.js",
"myCredential/configures/**/*.*",
"config.js"],
dest: "build/tlf/src/app/business/custom/",
expand: true
}
]
},
tlf_mexico: {
files: [
{
cwd: "public/tlf/WEB-INF/other/",
src: 'web.xml',
dest: 'dest/dest/tlf_mexico/WEB-INF/',
expand: true
},
{
cwd: "theme/"+target+"/",
src: ['fonts/*.*'],
dest: 'dest/dest/'+target+'/theme/movistar/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*",
"!iam/controllers/users/editUserController.js",
"!iam/controllers/users/userListController.js",
"!myCredential/controllers/basicSettingsController.js",
"!myCredential/controllers/modifyCredentialController.js",
"!myCredential/configures/**/*.*",
"!config.js"],
dest: "build/tlf_mexico/src/app/business/custom/",
expand: true
},
{
cwd: "public/tlf/src/",
src: ["iam/views/**/*.*", "myCredential/views/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*",
"iam/controllers/users/editUserController.js",
"iam/controllers/accountSetup/warningPolicyController.js",
"iam/controllers/users/userListController.js",
"myCredential/controllers/basicSettingsController.js",
"myCredential/controllers/modifyCredentialController.js",
"myCredential/controllers/modifyAccessVerify.js",
"myCredential/controllers/modifyMcVerify.js",
"myCredential/configures/**/*.*",
"config.js"],
dest: "build/tlf_mexico/src/app/business/custom/",
expand: true
}
]
},
tlf_vivo: {
files: [
{
cwd: "public/tlf/WEB-INF/other/",
src: 'web.xml',
dest: 'dest/dest/tlf_vivo/WEB-INF/',
expand: true
},
{
cwd: "theme/"+target+"/",
src: ['fonts/*.*'],
dest: 'dest/dest/'+target+'/theme/vivo/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*",
"!iam/controllers/users/editUserController.js",
"!iam/controllers/users/userListController.js",
"!myCredential/controllers/basicSettingsController.js",
"!myCredential/controllers/modifyCredentialController.js",
"!myCredential/configures/**/*.*",
"!config.js"],
dest: "build/tlf_vivo/src/app/business/custom/",
expand: true
},
{
cwd: "public/tlf/src/",
src: ["iam/views/**/*.*", "myCredential/views/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*",
"iam/controllers/users/editUserController.js",
"iam/controllers/accountSetup/warningPolicyController.js",
"iam/controllers/users/userListController.js",
"myCredential/controllers/basicSettingsController.js",
"myCredential/controllers/modifyCredentialController.js",
"myCredential/controllers/modifyAccessVerify.js",
"myCredential/controllers/modifyMcVerify.js",
"myCredential/configures/**/*.*",
"config.js"],
dest: "build/tlf_vivo/src/app/business/custom/",
expand: true
}
]
},
tlf_global: {
files: [
{
cwd: "public/tlf/WEB-INF/other/",
src: 'web.xml',
dest: 'dest/dest/tlf_global/WEB-INF/',
expand: true
},
{
cwd: "theme/"+target+"/",
src: ['fonts/*.*'],
dest: 'dest/dest/'+target+'/theme/telefonica/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*",
"!iam/controllers/users/editUserController.js",
"!iam/controllers/users/userListController.js",
"!myCredential/controllers/basicSettingsController.js",
"!myCredential/controllers/modifyCredentialController.js",
"!myCredential/configures/**/*.*",
"!config.js"],
dest: "build/tlf_global/src/app/business/custom/",
expand: true
},
{
cwd: "public/tlf/src/",
src: ["config.js", "iam/views/**/*.*", "myCredential/views/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*",
"iam/controllers/users/editUserController.js",
"iam/controllers/accountSetup/warningPolicyController.js",
"iam/controllers/users/userListController.js",
"myCredential/controllers/basicSettingsController.js",
"myCredential/controllers/modifyCredentialController.js",
"myCredential/controllers/modifyAccessVerify.js",
"myCredential/controllers/modifyMcVerify.js",
"myCredential/configures/**/*.*",
"config.js"],
dest: "build/tlf_global/src/app/business/custom/",
expand: true
}
]
},
ocb: {
files: [
{
cwd: "public/default/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/ocb/WEB-INF/',
expand: true
},
{
cwd: "public/default/src/",
src: ["**", "!iam/views/**/*.*", "!myCredential/views/**/*.*",
"!iam/configures/**/*.*", "!iam/services/**/*.*", "!iam/controllers/agentRegister/**/*.*",
"!iam/controllers/users/userListController.js","!myCredential/configures/**/*.*", "!myCredential/controllers/**/*.*"],
dest: "build/ocb/src/app/business/custom/",
expand: true
},
{
cwd: "public/ocb/src/",
src: ["config.js", "iam/views/**/*.*", "myCredential/views/**/*.*", "iam/controllers/**/*.*",
"iam/configures/**/*.*","iam/services/**/*.*","myCredential/configures/**/*.*","myCredential/controllers/**/*.*"],
dest: "build/ocb/src/app/business/custom/",
expand: true
}
]
},
dt: {
files: [
{
cwd: "public/dt/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/dt/WEB-INF/',
expand: true
},
{
cwd: "public/dt/src",
src: ["**"],
dest: "build/dt/src/app/business/custom/",
expand: true
}
]
},
prc: {
files: [
{
cwd: "public/default/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/prc/WEB-INF/',
expand: true
},
{
cwd: "public/default/src",
src: ["**", "!iam/views/agentRegister/*.*", "!iam/controllers/agentRegister/*.*","!iam/configures/**/*.*","!config.js", "!iam/views/users/editUser.html", "!iam/services/common/iamUtilsCustom.js"],
dest: "build/prc/src/app/business/custom/",
expand: true
},
{
cwd: "public/prc/src/",
src: ["iam/configures/iamRouterConfig.js", "config.js","iam/views/users/editUser.html","iam/services/common/iamUtilsCustom.js","myCredential/views/accountInfo.html"],
dest: "build/prc/src/app/business/custom/",
expand: true
}
]
},
ct: {
files: [
{
cwd: "public/ct/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/ct/WEB-INF/',
expand: true
},
{
cwd: "public/ct/src",
src: ["**"],
dest: "build/ct/src/app/business/custom/",
expand: true
}
]
},
cmcc: {
files: [
{
cwd: "public/cmcc/WEB-INF/",
src: 'web.xml',
dest: 'dest/dest/cmcc/WEB-INF/',
expand: true
},
{
cwd: "public/cmcc/src",
src: ["**"],
dest: "build/cmcc/src/app/business/custom/",
expand: true
}
]
},
iam_package_main: {
files: [
{cwd: "build/"+target+"/", src: ["**/*.*", "!**/*.css", "**/*business*.css"], dest: "dest/dest/"+target, expand: true}
]
},
iam_remain: {
files: [
{src: "redirect.jsp", dest: "dest/"},
{src: "error.jsp", dest: "dest/"},
{cwd: "WEB-INF/", src: "**/*.*", dest: "dest/WEB-INF/", expand: true},
{cwd: "META-INF/", src: "**/*.*", dest: "dest/META-INF/", expand: true}
]
}
},

//搜索要合并的css, 并替换文本
replace: {
//主模块启动前将模板模块依赖进去
relyTpls: {
files: [
{
dest: 'build/'+target+'/',
expand: true,
src: ['src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /define\s*\(\s*('(\'|")[\w\d-_/.!\,\:\[\]]+(\'|")\s*,?\s*)*\s*\[\s*((\'|")[\w\d-_/.!\,\:\[\]]+(\'|")\s*,?\s*)*\s*\]/,
replacement: function (matchedString) {
//第一个替换的是框架模板依赖的模块,后面是业务模板依赖的模块(与ngtemplates任务输入模块的依赖相同)
return matchedString.replace('app-remote/framework/directive/hwsDirective', 'framework.tpls');
}
}
]
}
},
dt: {
files: [
{
dest: 'build/dt',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-default\-start[\s\S]*menus\-default\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"hk": {
files: [
{
dest: 'build/hk',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"tlf_vivo": {
files: [
{
dest: 'build/tlf-vivo',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"tlf": {
files: [
{
dest: 'build/tlf',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"tlf_mexico": {
files: [
{
dest: 'build/tlf-mexico',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"tlf_chile": {
files: [
{
dest: 'build/tlf-chile',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"tlf_global": {
files: [
{
dest: 'build/tlf_global',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
hws: {
files: [
{
dest: 'build/hws',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>/,
replacement: function () {
return "";
}
}
]
}
},
"prc": {
files: [
{
dest: 'build/prc',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"ocb": {
files: [
{
dest: 'build/ocb',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"ct": {
files: [
{
dest: 'build/ct',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
"cmcc": {
files: [
{
dest: 'build/cmcc',
expand: true,
src: ['main.js', 'src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /(\<\!\-\-menus\-dt\-start[\s\S]*menus\-dt\-end\-\-\>)|(\/\/menus\-hws\-start[\s\S]*\/\/menus\-hws\-end)/,
replacement: function () {
return "";
}
}
]
}
},
cssGather: {
files: [
{
dest: 'build/'+target+'/',
expand: true,
src: ['index.html']
}
],
options: {
patterns: [
{
//Grab the <!--business-js-start--> and <!--business-js-end--> comments and everything in-between
match: /\<\!\-\-business\-css\-start[\s\S]*business\-css\-end\-\-\>/,
replacement: function (matchedString) {
//Grab all of the href attributes from the <href> tags
var tmpTarget = target;
var regExp = new RegExp('<\\!\\-\\-css\\-' + tmpTarget + '\\-start[\\s\\S]*css\\-' + tmpTarget + '\\-end\\-\\-\\>');
var matchArrary = matchedString.match(regExp);
if (!matchArrary || matchArrary.length !== 1) {
console.error(regExp.source + ' match result is wrong');
return matchedString;
}
var cssArray = matchArrary[0].match(/(href\s?\=\s?[\'\"])([^\'\"]*)([\'\"])/g);
if (cssArray) {
cssArray.forEach(function (element) {
var resourceTarget = element.match(/(href\s?\=\s?[\'\"])([^\'\"]*)([\'\"])/)[2];
var spriteTarget = resourceTarget.match(/(.*)(.css)/);
if (spriteTarget !== null) {
var targetConfig = grunt.config('cssResources');
//check sprite css is exist
var spritePath = spriteTarget[1] + "-sprite.css";
var exists = fs.existsSync(spritePath);
//Alter the path for use with the concat task
if (exists) {
console.log("has sprite css file, name=", spritePath);
//Alter the path for use with the concat task
targetConfig.push(spritePath);
} else {
console.log("no sprite css file, name=", resourceTarget);
targetConfig.push(resourceTarget);
}
//Add the path to the CSS file to the cssResources configuration property
grunt.config('cssResources', targetConfig);
}

});
//Replace the entire business-css-start to business-css-end block with this <link> tag
return '<link rel="stylesheet" type="text/css" href="theme/default/css/combined-business.min.css"/>';
} else {
//Replace the entire business-css-start to business-css-end block with this <link> tag
return '';
}
}
},
{
//Grab the <!--framework-js-start--> and <!--framework-js-end--> comments and everything in-between
match: /\<\!\-\-framework\-css\-start[\s\S]*framework\-css\-end\-\-\>/,
replacement: function () {
//Replace the entire business-css-start to business-css-end block with this <link> tag
return '<link rel="stylesheet" type="text/css" href="theme/default/css/combined-framework.min.css"/>';
}
}
]
}
},
jsGather: {
files: [
{
cwd: 'build/'+target+'/',
dest: 'build/'+target+'/',
expand: true,
src: ['index.html']
}
],
options: {
patterns: [
{
match: /\<\!\-\-framework\-utils\-script\-start[\s\S]*framework\-utils\-script\-end\-\-\>/,
replacement: function () {
return '<script type="text/javascript" src="frameworkCommons.js"></script>';
}
},
{
match: /\<\!\-\-framework\-bundleJs\-over\-here\-\-\>/,
replacement: function () {
return '<script type="text/javascript" src="frameworkModules.js"></script>';
}
}
]
}
},
frameworkJs: {
files: [
{
dest: './',
expand: false,
src: ['build/'+target+'/src/app/framework/framework.js']
}
],
options: {
patterns: [
{
match: /\/\/static.console.huaweicloud.com\//g,
replacement: '<%= grunt.config("remoteResource").staticResourceServer %>'
}
]
}
},
fixtures: {
files: [
{
dest: './',
expand: true,
src: ['build/'+target+'/**/**.js']
}
],
options: {
patterns: [
{
match: /define\s*\(\s*((\'|\")[\w\d\-_\/.!\,\:\[\]]+(\'|")\s*,?\s*)*\s*\[\s*((\'|")[\w\d\-_\/.!\,\:\[\]]+(\'|")\s*,?\s*)*\s*\]/ig,

 


replacement: function (matchedString) {
return matchedString.replace(/(\'|")fixtures(\/[\w]+)+(\'|")/g, '""');
}
}
]
}
},
//iam customed,used to append random code to url for cache issue.
addRandomCode: {
files: [
{
expand: true,
src: ['dest/dest/'+target+'/index.html']
}
],
options: {
patterns: [
{
match: /(href|src)\s*=.*(\.js|\.ico|\.css)/g,
replacement: function (matchedString) {
return matchedString+"?ttl="+randomCode;
}
}
]
}
}
},

//css 合并
concat: {
css: {
//Concatenate all of the files in the cssResources configuration property
src: ['<%= cssResources %>'],
dest: 'build/'+target+'/theme/default/css/combined-business.min.css'
}
},

//css 压缩
cssmin: {
min: {
options: {
compatibility: {
properties: {
urlQuotes: true
}
}
},
files: [{
expand: true,
src: ['build/'+target+'/theme/default/**/*.css']
}]
}
},
//压缩
uglify: {
min: {
options: {
nameCache: false,
screwIE8: true,
compress: {
drop_console: true,
join_vars: false,
negate_iife: false,
sequences: false,
hoist_vars: true,
if_return: false
},
mangle: false,
beautify: {
quote_keys: true,
quote_style: 1
}
},
files: [
{
cwd: "build/"+target+'/',
src: ["i18n/**/*.js", "src/app/business/**/*.js", '!src/app/business/custom/config.js', '!i18n/**/*.min.js', '!i18n/**/*-min.js', '!i18n/**/framework.js'],
dest: "build/"+target,
expand: true
},
{
cwd: "build/"+target+'/',
src: ["src/**/*.js", '!src/app/business/custom/config.js', '!src/**/*.min.js', '!src/app/framework/**', '!src/app/services/**'],
dest: "build/"+target,
expand: true
},
{
cwd: "build/"+target+'/',
src: ['src/app/framework/framework.js'],
dest: "build/"+target+'/',
expand: true
},
{
cwd: "build/"+target+'/',
src: ['main.js'],
dest: "build/"+target+'/',
expand: true
}
]
}
},

//replace path and url
replace_url: {
framework: {
options: {
remoteUrl: function () {
var remoteResource = grunt.config("remoteResource");
var target = grunt.option('target');
//if (target != 'hws') {
// var staticServer = remoteResource.staticResourceServer;
//}else{
// var staticServer = '//console-static.huaweicloud.com/static/';
//}
var staticServer = '//console-static.huaweicloud.com/static/';
var remoteResourcePath;
if (staticServer) {
if (staticServer.charAt(staticServer.length - 1) === '/') {
remoteResourcePath = staticServer + remoteResource.frameResourceDir[target];
} else {
remoteResourcePath = staticServer + '/' + remoteResource.frameResourceDir[target];
}
if (remoteResource.frameworkVersion) {
remoteResourcePath = remoteResourcePath + '/' + remoteResource.frameworkVersion;
}
}
return remoteResourcePath;
},
mainJs: {
filePath: 'build/'+target+'/main.js', //data-main 文件的路径
configFile: 'main.json',
remotePaths: ["can", "app-remote", "angular","ui-router", "bootstrap", "moment",
"language-remote", "lazy-load", "remote-lib"]
},
cwd: 'build', //必填, 要hash的所有文件的目录名
targetFiles: [{src: [target+'/index.html']}],
files: [
{src: ['./theme/default/images/favicon.ico', './theme/default/css/combined-framework.min.css', './theme/default/css/bootstrap.min.css','./theme/default/css/framework.customization.css','./theme/default/css/tiny2.min.css',
'./frameCommon.js', './frameConf.js','./es5-func-polyfill.js','./browserChecker.js', './lib/require.js', './lib/tiny/tiny.min.js', './lib/tiny/tiny2.min.js','./lib/tiny-plus/tiny-plus.min.js','./lib/bootstrap-0.12.1.js','frameworkCommons.js', 'frameworkModules.js']}
]
}
},
business: {
options: {
remoteUrl: function () {
var remoteResource = grunt.config("remoteResource");
var target = grunt.option('target');
if (target != 'hws') {
var staticServer = remoteResource.staticResourceServer;
}else{
var staticServer = '//console-static.huaweicloud.com/static/';
}
var remoteResourcePath;
if (staticServer) {
if (staticServer.charAt(staticServer.length - 1) === '/') {
remoteResourcePath = staticServer + remoteResource.businessResourceDir[target];
} else {
remoteResourcePath = staticServer + '/' + remoteResource.businessResourceDir[target];
}
}
return remoteResourcePath;
},
mainJs: {
filePath: 'build/'+target+'/main.js', //data-main 文件的路径
configFile: 'main.json',
remotePaths: ["language"]
},
cwd: 'build', //必填, 要hash的所有文件的目录名
targetFiles: [{src: [target+'/index.html']}],
files: [
{src: ['./theme/default/css/combined-business.min.css']}
]
}
}
}
});
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-replace-url');
grunt.loadNpmTasks('grunt-safety');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-replace');
grunt.loadNpmTasks('grunt-contrib-cssmin');


grunt.registerTask('package', ['clean:build_main', "clean:iam_package_main", 'copy:main', 'copy:' + target, 'replace:cssGather', 'replace:jsGather', 'replace:' + target,'replace:relyTpls', 'concat:css', 'cssmin:min',
'replace:frameworkJs', 'replace_url:framework', 'replace_url:business', 'replace:fixtures','uglify:min', "copy:iam_package_main", "replace:addRandomCode"]);

grunt.registerTask('css', ['clean:build', 'copy', 'replace:gather', 'concat', 'cssmin']);

grunt.registerTask('ci-checks', ['jshint']);

// By default, lint and run all tests.
grunt.registerTask('default', ['package']);

if (!fs.existsSync("dest")) {
fs.mkdirSync("dest");
}
if (!fs.existsSync("dest/dest")) {
fs.mkdirSync("dest/dest");
}
};

转载于:https://www.cnblogs.com/mushimeng/p/9582818.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值