app.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. 'use strict';
  2. /**
  3. * 自定义启动文件
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/8/29
  7. * @version
  8. */
  9. const Uglyfy = require('uglify-es');
  10. const fs = require('fs');
  11. const moment = require('moment');
  12. const uuid = require('node-uuid');
  13. const _ = require('lodash');
  14. const calc = require('number-precision');
  15. const BaseService = require('./app/base/base_service');
  16. const BaseController = require('./app/base/base_controller');
  17. const menu = require('./config/menu');
  18. const JsFiles = require('./config/web');
  19. module.exports = app => {
  20. app.uuid = uuid;
  21. app.moment = moment;
  22. app._ = _;
  23. app.calc = calc;
  24. app.menu = menu;
  25. // 数据模型基类
  26. app.BaseService = BaseService;
  27. // 控制器基类
  28. app.BaseController = BaseController;
  29. // 自定义手机校验规则
  30. app.validator.addRule('mobile', (rule, value) => {
  31. try {
  32. const regPhone = /^1([34578]\d)\d{8}$/;
  33. const allowEmpty = rule.allowEmpty === true;
  34. if (allowEmpty && value === '') {
  35. return true;
  36. }
  37. if (!(value.length === 11 && regPhone.test(value))) {
  38. throw 'please enter the correct phone number';
  39. }
  40. } catch (error) {
  41. return error;
  42. }
  43. });
  44. // 自定义手机IP规则
  45. app.validator.addRule('ip', (rule, value) => {
  46. try {
  47. const allowEmpty = rule.allowEmpty === true;
  48. if (allowEmpty && value === '') {
  49. return true;
  50. }
  51. const regIP = /^(\d{2,})\.(\d+)\.(\d+)\.(\d+)$/;
  52. if (!regIP.test(value)) {
  53. throw 'please enter the correct ip address';
  54. }
  55. } catch (error) {
  56. return error;
  57. }
  58. });
  59. //压缩前端js
  60. app.jsFiles = { common: JsFiles.commonFiles };
  61. for (const c in JsFiles.controller) {
  62. const controller = JsFiles.controller[c];
  63. app.jsFiles[c] = {};
  64. for (const a in controller) {
  65. const action = controller[a];
  66. if (app.config.min && action.mergeFiles && action.mergeFile.length > 0) {
  67. const minFileName = JsFiles.webPath + action.mergeFile + '.' + app.config.version + '.min.js';
  68. let code = '';
  69. for (const f of action.mergeFiles) {
  70. code = code + fs.readFileSync(app.baseDir + '/app' + f, 'utf8');
  71. }
  72. fs.writeFileSync(app.baseDir + '/app' + minFileName, Uglyfy.minify(code, {mangle: true}).code);
  73. app.jsFiles[c][a] = action.files.concat([minFileName]);
  74. } else {
  75. app.jsFiles[c][a] = action.files.concat(action.mergeFiles || []);
  76. }
  77. }
  78. }
  79. if (app.config.min) {
  80. app.minify = (file) => {
  81. const files = file instanceof Array ? file : [file];
  82. for (const f of files) {
  83. const fileName = app.baseDir + '/app/public/js/' + f;
  84. const code = fs.readFileSync(fileName, 'utf8');
  85. fs.writeFileSync(fileName.replace('.js', '.min.js'), Uglyfy.minify(code, { mangle: true }).code);
  86. }
  87. };
  88. app.minify(['spreadjs_rela/spreadjs_zh.js', 'path_tree.js']);
  89. }
  90. };