let grunt = require('grunt'); let process = (src, filepath) => { return src.replace(/@import\s+"~\//g, '@import "'); }; grunt.loadNpmTasks('grunt-contrib-watch'); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), appFourJs : 'app/**/**/**/**/*.js', appThreeJs : 'app/**/**/**/*.js', appTwoJs : 'app/**/**/*.js', appOne : 'app/**/*.js', appFourLess : 'app/**/**/**/**/*.less', appThreeLess : 'app/**/**/**/*.less', appTwoLess : 'app/**/**/*.less', appOneLess : 'app/**/*.less', concat: { adminHomePageJs: { src: ['app/admin/homePage/**/*.js'], dest: '<%= pkg.bundleTemp %>/adminHomePage.js' }, adminHomePageLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/adminHomePage.less': ['app/admin/homePage/**/*.less'] } }, basicDataJs: { src: ['app/admin/basicData/**/*.js'], dest: '<%= pkg.bundleTemp %>/basicData.js' }, basicDataLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/basicData.less': ['app/admin/basicData/**/*.less'] } }, systemConfigurationJs: { src: ['app/admin/systemConfiguration/**/*.js'], dest: '<%= pkg.bundleTemp %>/systemConfiguration.js' }, systemConfigurationLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/systemConfiguration.less': ['app/admin/systemConfiguration/**/*.less'] } }, basicDataCss: { src: ['app/admin/basicData/**/*.css'], dest: '<%= pkg.bundleTemp %>/basicData.css' }, infrastructureJs: { src: ['app/admin/infrastructure/**/*.js'], dest: '<%= pkg.bundleTemp %>/infrastructure.js' }, infrastructureLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/infrastructure.less': ['app/admin/infrastructure/**/*.less'] } }, noPermissionPageJs: { src: ['app/admin/noPermissionPage/**/*.js'], dest: '<%= pkg.bundleTemp %>/noPermissionPage.js' }, noPermissionPageLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/noPermissionPage.less': ['app/admin/noPermissionPage/**/*.less'] } }, citJs: { src: ['app/cit/**/*.js'], dest: '<%= pkg.bundleTemp %>/cit.js' }, citLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/cit.less': ['app/cit/**/*.less'] } }, contentCss: { src: ["Content/bootstrap.css", "Content/bootstrap-select.min.css", "Content/bootstrap-switch/bootstrap3/bootstrap-switch.css", "Content/dx.common.css", "Content/dx.light.css", "Content/animate.css", "Content/font-awesome.css", "Content/normalize.css", "Content/loading-bar.css", "Content/perfect-scrollbar.min.css", "Content/bootstrap-multiselect.css", "Content/bootstrap-datepicker/bootstrap-datepicker3.min.css", "Content/ui-grid.css", "Content/Spreadjs11_1/css/gc.spread.sheets.11.1.0.css", "Content/angular-ui-tree.css", "Content/sweetalert-new.css", "Content/isteven-multi-select.css", "Content/ivh-treeview/ivh-treeview.css", "Content/angular-inline-edit/ng-inline-edit.css", "Content/ivh-treeview/ivh-treeview-theme-basic.css", //"Content/bootflat.min.css", "Content/angular-notify/angular-notify.css", "Content/jquery.dataTables.css", "Content/ui-select/select.css", "Content/ui-select/select2.css", "Content/orgChart/jquery.orgchart.css", "Content/month-picker/picker.css", "Content/fancy-tree/ui.fancytree.css", "Content/angularjs-material/angular-material.css", "Content/daterangepicker.min.css", "Content/jquery-ui.css", "Content/jquery-ui.theme.css"], dest: 'Content/bundle_content.css' }, appresourcesCss: { src: ["app-resources/css/customer.css", //"app-resources/css/theme.css", "app-resources/css/nav.css", "app-resources/css/tree.css", "app-resources/css/icon.css", "app-resources/css/abn_tree.css", "app-resources/css/layout.css", "app-resources/css/toolbar.css", "app-resources/css/table.css"], dest: '<%= pkg.bundleDest %>/appresources.css' }, appresourcesLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/appresources.less': ["app-resources/css/**/*.less", "app-resources/less/**/*.less"] } }, commonCss: { src: ["app/common/**/*.css"], dest: '<%= pkg.bundleDest %>/common.css' }, commonLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/common.less': ["app/common/**/*.less"] } }, modernizr: { src: ["Scripts/modernizr-*"], dest: '<%= pkg.bundleTemp %>/modernizr.js' }, jquery: { src: ["Scripts/jquery/jquery-3.1.0.js"], dest: '<%= pkg.bundleTemp %>/jquery.js' }, jquerysignalR: { src: ["Scripts/jquery-signalr/jquery.signalR-2.2.1.js"], dest: '<%= pkg.bundleTemp %>/jquerysignalR.js' }, angular: { src: ["Scripts/angular.js", "Scripts/angular-route.js", "Scripts/angular-translate.js", "Scripts/angular-translate-loader-partial.js", "Scripts/angular-route.js", "Scripts/angular-cookies.js", "Scripts/angular-sanitize.js", "Scripts/angular-messages.js", "Scripts/angular-animate.js", "Scripts/angular-aria.js", "Scripts/loading-bar.js", "Scripts/ngDraggable.js", "Scripts/ng-file-upload.js", "Scripts/ng-file-upload-shim.js", "Scripts/angular-local-storage.js", "Scripts/i18n/angular-locale_zh-cn.js", "Scripts/bindonce.js", "Scripts/angular-vs-repeat.js", "Scripts/sweetalert-new.min.js", "Scripts/abn-tree/abn_tree_directive.js", "Scripts/angular-perfect-scrollbar.min.js", "Scripts/angular-material/angular-material.js", "Scripts/ngRemoteValidate.0.6.1.js", "Scripts/fileSaver/FileSaver.js", "Scripts/fileSaver/angular-file-saver.js", "Scripts/moment.min.js", "Scripts/jquery-daterangepicker/jquery.daterangepicker.js", "Scripts/sortable.js", "Scripts/malhar-angular-dashboard.js"], dest: '<%= pkg.bundleTemp %>/angular.js' }, angularui: { src: ["Scripts/angular-ui/ui-bootstrap-tpls.js", "Scripts/angular-ui/ui-bootstrap.js", "Scripts/angular-ui/ui-utils-ieshiv.js", "Scripts/angular-ui/ui-utils.js", "Scripts/angular-ui-router.js", "Scripts/ct-ui-router-extras.js", "Scripts/ui-grid.js", "Scripts/angular-ui-tree.js", "Scripts/isteven-multi-select.js", "Scripts/xlsx.full.min.js", "Scripts/Export2Excel.js", "Scripts/Blob.js", "Scripts/FileSaver.min.js", "Scripts/moment.min.js"], dest: '<%= pkg.bundleTemp %>/angularui.js' }, bootstrap: { src: ["Scripts/bootstrap.js", "Scripts/bootstrap-switch.js", "Scripts/bootstrap-multiselect.js", "Scripts/bootstrap-datepicker/bootstrap-datepicker.js", "Scripts/locales/bootstrap-datepicker.zh-CN.min.js", "Scripts/bootstrap-select.min.js", "Scripts/respond.js"], dest: '<%= pkg.bundleTemp %>/bootstrap.js' }, util: { src: ["Scripts/underscore.js", "Scripts/arrgh.js", "Scripts/tableau-2.2.2.min.js", "Scripts/jquery.page.js", "Scripts/jquery.floatThead.js", "Scripts/jquery.dataTables.js", "Scripts/perfect-scrollbar.jquery.min.js", "Scripts/jquery-ui.min.js", "Scripts/numeral.js", "Scripts/angular-numeraljs.js", "Scripts/split.min.js", "Scripts/fancy-tree/jquery.fancytree.js", "Scripts/fancy-tree/jquery.fancytree.dnd.js", "Scripts/fancy-tree/jquery.fancytree.edit.js", "Scripts/fancy-tree/jquery.fancytree.glyph.js", "Scripts/fancy-tree/jquery.fancytree.table.js", "Scripts/fancy-tree/jquery.fancytree.wide.js", "Scripts/fancy-tree/jquery.fancytree.filter.js", "Scripts/fancy-tree/jquery.fancytree-all-deps.min.js", "Scripts/viewer/viewer.js", "Scripts/xlsx/shim.min.js", "Scripts/xlsx/xlsx.full.min.js", "Scripts/position-calculator/position-calculator.min.js", "Scripts/bootstrp-confirm/bootstrap-confirm.js" ], dest: '<%= pkg.bundleTemp %>/util.js' }, angularFileUpload:{ src: ["Scripts/angular-file-upload.js"], dest: '<%= pkg.bundleTemp %>/angular-file-upload.js' }, pdfWorker:{ src: [ "Scripts/pdf/pdf.js", "Scripts/pdf/pdf.worker.js"], dest: '<%= pkg.bundleTemp %>/pdf.worker.js' }, jqueryval: { src: ["Scripts/jquery.validate*"], dest: '<%= pkg.bundleTemp %>/jqueryval.js' }, exceptionless: { src: ["Scripts/exceptionless/exceptionless.js", "Scripts/exceptionless/integrations/angular.js"], dest: '<%= pkg.bundleTemp %>/exceptionless.js' }, angularCache: { src: ["Scripts/angular-cache/angular-cache.js"], dest: '<%= pkg.bundleTemp %>/angular-cache.js' }, echarts: { src: ["Scripts/echarts.min.js", "Scripts/orgChart/jquery.orgchart.js", "Scripts/orgChart/html2canvas.min.js"], dest: '<%= pkg.bundleTemp %>/echarts.js' }, mentio: { src: ["Scripts/mentio.js"], dest: '<%= pkg.bundleTemp %>/mentio.js' }, adminApp: { src: ["app/adminApp.js", "app/app.config.js", "app/adminModule.js"], dest: '<%= pkg.bundleTemp %>/adminApp.js' }, commonJs: { src: ["app/common/**/*.js"], dest: '<%= pkg.bundleTemp %>/common.js' }, frameworkJs: { src: ["app/framework/**/*.js", "app/dashboard/**/*.js"], dest: '<%= pkg.bundleTemp %>/framework.js' }, cldr: { src: ["Scripts/cldr.js", "Scripts/cldr/event.js", "Scripts/cldr/supplemental.js", "Scripts/cldr/unresolved.js"], dest: '<%= pkg.bundleTemp %>/cldr.js' }, globalize: { src: ["Scripts/globalize.js", "Scripts/globalize/number.js", "Scripts/globalize/date.js"], dest: '<%= pkg.bundleTemp %>/globalize.js' }, dx: { src: ["Scripts/jquery.globalize/globalize.js", "Scripts/jszip.min.js", "Scripts/dx.all.js", "Scripts/devextreme-localization/dx.messages.cn.js"], dest: '<%= pkg.bundleTemp %>/dx.js' }, spreadjs: { src: ["Scripts/Spreadjs11_1/gc.spread.sheets.all.11.1.0.min.js"], dest: '<%= pkg.bundleDest %>/spread.js' }, spreadiojs: { src: ["Scripts/Spreadjs11_1/interop/gc.spread.excelio.11.1.0.min.js"], dest: '<%= pkg.bundleDest %>/spreadio.js' }, ivhTreeview: { src: ["Scripts/angular-ivh-treeview/ivh-treeview.js", "Scripts/angular-notify/angular-notify.js", "Scripts/angular-inline-edit/ng-inline-edit.js"], dest: '<%= pkg.bundleTemp %>/ivh-treeview.js' }, uiSelect: { src: ["Scripts/ui-select/select.js"], dest: '<%= pkg.bundleTemp %>/ui-select.js' }, accountLogin: { src: ["app-resources/css/customer.css"], dest: '<%= pkg.bundleDest %>/accountLogin.css' }, scriptsLogin: { src: ["Scripts/login.js", "Scripts/jquery.validate.js"], dest: '<%= pkg.bundleTemp %>/scriptsLogin.js' }, jsword: { src: ["Scripts/jsword/canvas-toBlob.js", "Scripts/jsword/FileSaver.js", "Scripts/jsword/docxtemplater.v3.0.0.js", "Scripts/jsword/imagemodule.js", "Scripts/jsword/jszip.js", "Scripts/jsword/jszip-utils.js"], dest: '<%= pkg.bundleTemp %>/jsword.js' }, monthPicker: { src: ["Scripts/month-picker/datePicker.js", "Scripts/month-picker/tether.min.js"], dest: '<%= pkg.bundleTemp %>/month-picker.js' }, frameworkLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/framework.less': ["app/framework/**/*.less", "app/dashboard/**/*.less"] } }, taxDocumentManageLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/taxDocumentManage.less': "app/taxDocumentManage/**/*.less" } }, taxDocumentManageJs: { src: "app/taxDocumentManage/**/*.js", dest: '<%= pkg.bundleTemp %>/taxDocumentManage.js' }, appJs: { src: ["Scripts/app.js", "Scripts/app.config.js", "Scripts/module-part1.js", "Scripts/module-part2.js", "Scripts/module-part3.js", "Scripts/module-part4.js" ], dest: '<%= pkg.bundleTemp %>/app.js' }, summaryCs: { src: ["Content/jquery-ui.theme.css", "Content/jquery-ui-themes-1.8.10.custom.css", "Content/axure_rp_page.css", "Content/styles.css"], dest: '<%= pkg.bundleDest %>/summary.css' }, vatJs: { src: "app/vat/**/*.js", dest: '<%= pkg.bundleTemp %>/vat.js' }, vatCss: { src: "app/vat/**/*.css", dest: '<%= pkg.bundleDest %>/vat.css' }, vatLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/vat.less': "app/vat/**/*.less" } }, dataImpJs: { src: "app/dataImport/**/*.js", dest: '<%= pkg.bundleTemp %>/dataImp.js' }, dataImpCss: { src: "app/dataImport/**/*.css", dest: '<%= pkg.bundleDest %>/dataImp.css' }, dataImpLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/dataImp.less': "app/dataImport/**/*.less" } }, analysisJs: { src: "app/analysis/**/*.js", dest: '<%= pkg.bundleTemp %>/analysis.js' }, analysisCss: { src: "app/analysis/**/*.css", dest: '<%= pkg.bundleDest %>/analysis.css' }, analysisLess: { options: {process}, files: { '<%= pkg.bundleDest %>/less/analysis.less': "app/analysis/**/*.less" } }, citCss: { src: "app/cit/**/*.css", dest: '<%= pkg.bundleDest %>/cit.css' }, }, less: { adminHomePage: { files: { "<%= pkg.bundleDest %>/adminHomePage.less": "<%= pkg.bundleDest %>/less/adminHomePage.less" } }, basicData: { files: { "<%= pkg.bundleDest %>/basicData.less": "<%= pkg.bundleDest %>/less/basicData.less" } }, infrastructure: { files: { "<%= pkg.bundleDest %>/infrastructure.less": "<%= pkg.bundleDest %>/less/infrastructure.less" } }, noPermissionPage: { files: { "<%= pkg.bundleDest %>/noPermissionPage.less": "<%= pkg.bundleDest %>/less/noPermissionPage.less" } }, cit: { files: { "<%= pkg.bundleDest %>/cit.less": "<%= pkg.bundleDest %>/less/cit.less" } }, dataImp: { files: { "<%= pkg.bundleDest %>/dataImp.less": "<%= pkg.bundleDest %>/less/dataImp.less" } }, analysis: { files: { "<%= pkg.bundleDest %>/analysis.less": "<%= pkg.bundleDest %>/less/analysis.less" } }, appresources: { files: { '<%= pkg.bundleDest %>/appresources.less': '<%= pkg.bundleDest %>/less/appresources.less' } }, systemConfiguration: { files: { '<%= pkg.bundleDest %>/systemConfiguration.less': '<%= pkg.bundleDest %>/less/systemConfiguration.less' } }, common: { files: { '<%= pkg.bundleDest %>/common.less': '<%= pkg.bundleDest %>/less/common.less' } }, vat: { files: { "<%= pkg.bundleDest %>/vat.less": "<%= pkg.bundleDest %>/less/vat.less" } } }, //压缩js uglify: { //文件头部输出信息 options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, my_target: { files: [ { expand: true, //相对路径 cwd: '<%= pkg.bundleTemp %>/', src: '*.js', dest: '<%= pkg.bundleDest %>/', // rename: function (dest, src) { // var folder = src.substring(0, src.lastIndexOf('/')); // var filename = src.substring(src.lastIndexOf('/'), src.length); // filename = filename.substring(0, filename.lastIndexOf('.')); // var fileResult = dest + folder + filename + '.min.js'; // grunt.log.writeln("现处理文件:" + src + " 处理后文件:" + fileresult); // // return fileResult; // } } ] } }, //压缩css cssmin: { //文件头部输出信息 options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n', //美化代码 beautify: { //中文ascii化,非常有用!防止中文乱码的神配置 ascii_only: true } }, my_target: { files: [ { expand: true, //相对路径 cwd: 'bundles/', src: '*.css', dest: 'dist/', // rename: function (dest, src) { // var folder = src.substring(0, src.lastIndexOf('/')); // var filename = src.substring(src.lastIndexOf('/'), src.length); // // var filename=src; // filename = filename.substring(0, filename.lastIndexOf('.')); // var fileresult = dest + folder + filename + '.min.css'; // grunt.log.writeln("现处理文件:" + src + " 处理后文件:" + fileresult); // // return fileresult; // } } ] } }, clean: { temp: ['<%= pkg.bundleTemp %>'] }, copy: { html: { files: [{ expand: true, cwd: '<%= pkg.bundleTemp %>/', src: '**/*', dest: '<%= pkg.bundleDest %>/' }] } }, watch : { scripts: { files: ['<%=appFourJs%>','<%=appThreeJs%>','<%=appTwoJs%>','<%=appOne%>','<%=appFourLess%>','<%=appThreeLess%>','<%=appTwoLess%>','<%=appOneLess%>'], tasks: ['dev'], options: { spawn: false } } } }); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.registerTask('build', '生产构建任务', function () { grunt.task.run(['concat', 'less', 'uglify', 'clean']) }); grunt.registerTask('dev', '开发环境', function () { grunt.task.run(['concat:adminHomePageJs', 'concat:adminHomePageLess','concat:basicDataJs','concat:angularFileUpload','concat:pdfWorker', 'concat:basicDataLess', 'concat:systemConfigurationJs','concat:systemConfigurationLess', 'concat:basicDataCss', 'concat:infrastructureJs','concat:infrastructureLess', 'concat:commonCss', 'concat:commonLess','concat:adminApp','concat:noPermissionPageJs','concat:noPermissionPageLess', 'concat:citJs','concat:citCss','concat:citLess', 'concat:commonJs', 'concat:frameworkJs','concat:frameworkLess', 'concat:taxDocumentManageLess', 'concat:taxDocumentManageJs','concat:appJs', 'concat:vatJs', 'concat:vatCss','concat:vatLess', 'concat:dataImpJs', 'concat:dataImpCss','concat:dataImpLess', 'concat:analysisJs', 'concat:analysisCss','concat:analysisLess', 'concat:scriptsLogin','less', 'copy', 'clean']) });