main.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //脚本文件目录 __dirname
  2. //运行脚本的目录,即:项目的目录 process.cwd()
  3. //配置文件
  4. const fs = require('fs'),
  5. Hjson = require('hjson'),
  6. config = Hjson.rt.parse(fs.readFileSync(__dirname+'/config.js', 'utf-8'))
  7. const change_after = require('./change_after')
  8. if(process.argv[2] == 'change'){
  9. change(config,()=>{
  10. console.log('脚本change已经执行成功');
  11. change_after()
  12. })
  13. }else{
  14. recovery(config)
  15. }
  16. function change(config,callback){
  17. const total = Object.keys(config).length
  18. let index = 0;
  19. for (let fileName in config) {
  20. let path = process.cwd() + fileName
  21. let copyPath = __dirname + '/copy' + fileName
  22. let fileText = fs.readFileSync(path, 'utf-8')
  23. //保持原文件名先备份一份到/uni_modules_tools/copy目录下,然后再覆盖
  24. writeFileRecursive(copyPath, fileText, function(err) { //创建目录并写入文件
  25. if (err) {
  26. return console.log(err);
  27. }
  28. //改写
  29. let HfileObj = Hjson.rt.parse(fileText)
  30. //递归合并,为了保留注释内容
  31. mergeJSON(HfileObj,config[fileName])
  32. fs.writeFile(path, Hjson.rt.stringify(HfileObj, {
  33. quotes: 'all',
  34. separator: true,
  35. multiline: "off",
  36. bracesSameLine: true
  37. }), function(err) {
  38. if (err) {
  39. return console.log(err);
  40. }
  41. index++
  42. if(index == total){
  43. callback()
  44. }
  45. })
  46. })
  47. }
  48. }
  49. function recovery(){
  50. let paths = Object.keys(config)
  51. console.log(paths);
  52. paths.forEach(path=>{
  53. console.log(__dirname + '/copy' + path);
  54. let oldFile = fs.readFileSync(__dirname + '/copy' + path)
  55. console.log(process.cwd() + path);
  56. fs.writeFile(process.cwd() + path, oldFile, function(err) {
  57. if (err) {
  58. console.log(err);
  59. return
  60. }
  61. // fs.unlinkSync(__dirname + path+'.lock')
  62. })
  63. })
  64. }
  65. //创建目录并写入文件
  66. function writeFileRecursive(path, buffer, callback) {
  67. let lastPath = path.substring(0, path.lastIndexOf("/"));
  68. fs.mkdir(lastPath, {
  69. recursive: true
  70. }, (err) => {
  71. if (err) return callback(err);
  72. fs.writeFile(path, buffer, function(err) {
  73. if (err) return callback(err);
  74. return callback(null);
  75. });
  76. });
  77. }
  78. //递归合并,为了保留注释内容
  79. function mergeJSON(minor, main) {
  80. for (var key in main) {
  81. if (typeof(main[key]) != 'object' ) {
  82. minor[key] = main[key];
  83. }else{
  84. mergeJSON(minor[key], main[key]);
  85. }
  86. }
  87. }