Gruntfile.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. module.exports = function (grunt) {
  2. grunt.initConfig({
  3. pkg: grunt.file.readJSON('package.json'),
  4. copy: {
  5. main: {
  6. files: []
  7. }
  8. }
  9. });
  10. var build = function (module, type, callback) {
  11. var config = {
  12. compile: {
  13. options: type === 'js' ? {
  14. optimizeCss: "standard",
  15. optimize: "none", //可使用uglify|closure|none
  16. preserveLicenseComments: true,
  17. removeCombined: false,
  18. baseUrl: "./public/assets/js/", //JS文件所在的基础目录
  19. name: "require-" + module, //来源文件,不包含后缀
  20. out: "./public/assets/js/require-" + module + ".min.js" //目标文件
  21. } : {
  22. optimizeCss: "default",
  23. optimize: "uglify", //可使用uglify|closure|none
  24. cssIn: "./public/assets/css/" + module + ".css", //JS文件所在的基础目录
  25. out: "./public/assets/css/" + module + ".min.css" //目标文件
  26. }
  27. }
  28. };
  29. var content = grunt.file.read("./public/assets/js/require-" + module + ".js"),
  30. pattern = /^require\.config\(\{[\r\n]?[\n]?(.*?)[\r\n]?[\n]?}\);/is;
  31. var matches = content.match(pattern);
  32. if (matches) {
  33. if (type === 'js') {
  34. var data = matches[1].replaceAll(/(urlArgs|baseUrl):(.*)\n/gi, '');
  35. const parse = require('parse-config-file'), fs = require('fs');
  36. require('jsonminify');
  37. data = JSON.minify("{\n" + data + "\n}");
  38. let options = parse(data);
  39. options.paths.tableexport = "empty:";
  40. Object.assign(config.compile.options, options);
  41. }
  42. let requirejs = require("./application/admin/command/Min/r");
  43. try {
  44. requirejs.optimize(config.compile.options, function (buildResponse) {
  45. // var contents = require('fs').readFileSync(config.compile.options.out, 'utf8');
  46. callback();
  47. }, function (err) {
  48. console.error(err);
  49. callback();
  50. });
  51. } catch (err) {
  52. console.error(err);
  53. callback();
  54. }
  55. }
  56. };
  57. // 加载 "copy" 插件
  58. grunt.loadNpmTasks('grunt-contrib-copy');
  59. grunt.registerTask('frontend:js', 'build frontend js', function () {
  60. var done = this.async();
  61. build('frontend', 'js', done);
  62. });
  63. grunt.registerTask('backend:js', 'build backend js', function () {
  64. var done = this.async();
  65. build('backend', 'js', done);
  66. });
  67. grunt.registerTask('frontend:css', 'build frontend css', function () {
  68. var done = this.async();
  69. build('frontend', 'css', done);
  70. });
  71. grunt.registerTask('backend:css', 'build frontend css', function () {
  72. var done = this.async();
  73. build('backend', 'css', done);
  74. });
  75. // 注册部署JS和CSS任务
  76. grunt.registerTask('deploy', 'deploy', function () {
  77. const fs = require('fs');
  78. const path = require("path")
  79. const nodeModulesDir = path.resolve(__dirname, "./node_modules");
  80. const getAllFiles = function (dirPath, arrayOfFiles) {
  81. files = fs.readdirSync(dirPath)
  82. arrayOfFiles = arrayOfFiles || []
  83. files.forEach(function (file) {
  84. if (fs.statSync(dirPath + "/" + file).isDirectory()) {
  85. arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles)
  86. } else {
  87. arrayOfFiles.push(path.join(__dirname, dirPath, "/", file))
  88. }
  89. });
  90. return arrayOfFiles
  91. };
  92. const mainPackage = grunt.config.get('pkg');
  93. let dists = mainPackage.dists || [];
  94. let files = [];
  95. Object.keys(dists).forEach(key => {
  96. let src = ["**/*LICENSE*", "**/*license*"];
  97. src = src.concat(Array.isArray(dists[key]) ? dists[key] : [dists[key]]);
  98. files.push({expand: true, cwd: nodeModulesDir + "/" + key, src: src, dest: 'public/assets/libs/' + key + "/"});
  99. });
  100. grunt.config.set('copy.main.files', files);
  101. grunt.task.run("copy:main");
  102. });
  103. // 注册默认任务
  104. grunt.registerTask('default', ['deploy', 'frontend:js', 'backend:js', 'frontend:css', 'backend:css']);
  105. };