Modularizer.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /**
  2. * Copyright 2013-2022 the PM2 project authors. All rights reserved.
  3. * Use of this source code is governed by a license that
  4. * can be found in the LICENSE file.
  5. */
  6. var path = require('path');
  7. var eachLimit = require('async/eachLimit');
  8. var forEachLimit = require('async/forEachLimit');
  9. var Configuration = require('../../Configuration.js');
  10. var cst = require('../../../constants.js');
  11. var Common = require('../../Common');
  12. var NPM = require('./NPM.js')
  13. var TAR = require('./TAR.js')
  14. var LOCAL = require('./LOCAL.js')
  15. var Modularizer = module.exports = {};
  16. /**
  17. * PM2 Module System.
  18. */
  19. Modularizer.install = function (CLI, module_name, opts, cb) {
  20. module_name = module_name.replace(/[;`|]/g, "");
  21. if (typeof(opts) == 'function') {
  22. cb = opts;
  23. opts = {};
  24. }
  25. if (LOCAL.INTERNAL_MODULES.hasOwnProperty(module_name)) {
  26. Common.logMod(`Adding dependency ${module_name} to PM2 Runtime`);
  27. var currentModule = LOCAL.INTERNAL_MODULES[module_name];
  28. if (currentModule && currentModule.hasOwnProperty('dependencies')) {
  29. LOCAL.installMultipleModules(currentModule.dependencies, cb);
  30. } else {
  31. LOCAL.install(currentModule, cb);
  32. }
  33. }
  34. else if (module_name == '.') {
  35. Common.logMod(`Installing local NPM module`);
  36. return NPM.localStart(CLI, opts, cb)
  37. }
  38. else if (opts.tarball || /\.tar\.gz$/i.test(module_name)) {
  39. Common.logMod(`Installing TAR module`);
  40. TAR.install(CLI, module_name, opts, cb)
  41. }
  42. else {
  43. Common.logMod(`Installing NPM ${module_name} module`);
  44. NPM.install(CLI, module_name, opts, cb)
  45. }
  46. };
  47. /**
  48. * Launch All Modules
  49. * Used PM2 at startup
  50. */
  51. Modularizer.launchModules = function(CLI, cb) {
  52. var modules = Modularizer.listModules();
  53. if (!modules) return cb();
  54. // 1#
  55. function launchNPMModules(cb) {
  56. if (!modules.npm_modules) return launchTARModules(cb)
  57. eachLimit(Object.keys(modules.npm_modules), 1, function(module_name, next) {
  58. NPM.start(CLI, modules, module_name, next)
  59. }, function() {
  60. launchTARModules(cb)
  61. });
  62. }
  63. // 2#
  64. function launchTARModules(cb) {
  65. if (!modules.tar_modules) return cb()
  66. eachLimit(Object.keys(modules.tar_modules), 1, function(module_name, next) {
  67. TAR.start(CLI, module_name, next)
  68. }, function() {
  69. return cb ? cb(null) : false;
  70. });
  71. }
  72. launchNPMModules(cb)
  73. }
  74. Modularizer.package = function(CLI, module_path, cb) {
  75. var fullpath = process.cwd()
  76. if (module_path)
  77. fullpath = require('path').resolve(module_path)
  78. TAR.package(fullpath, process.cwd(), cb)
  79. }
  80. /**
  81. * Uninstall module
  82. */
  83. Modularizer.uninstall = function(CLI, module_name, cb) {
  84. Common.printOut(cst.PREFIX_MSG_MOD + 'Uninstalling module ' + module_name);
  85. var modules_list = Modularizer.listModules();
  86. if (module_name == 'all') {
  87. if (!modules_list) return cb();
  88. return forEachLimit(Object.keys(modules_list.npm_modules), 1, function(module_name, next) {
  89. NPM.uninstall(CLI, module_name, next)
  90. }, () => {
  91. forEachLimit(Object.keys(modules_list.tar_modules), 1, function(module_name, next) {
  92. TAR.uninstall(CLI, module_name, next)
  93. }, cb)
  94. });
  95. }
  96. if (modules_list.npm_modules[module_name]) {
  97. NPM.uninstall(CLI, module_name, cb)
  98. } else if (modules_list.tar_modules[module_name]) {
  99. TAR.uninstall(CLI, module_name, cb)
  100. }
  101. else {
  102. Common.errMod('Unknown module')
  103. CLI.exitCli(1)
  104. }
  105. };
  106. /**
  107. * List modules based on modules present in ~/.pm2/modules/ folder
  108. */
  109. Modularizer.listModules = function() {
  110. return {
  111. npm_modules: Configuration.getSync(cst.MODULE_CONF_PREFIX) || {},
  112. tar_modules: Configuration.getSync(cst.MODULE_CONF_PREFIX_TAR) || {}
  113. }
  114. };
  115. Modularizer.getAdditionalConf = function(app_name) {
  116. return NPM.getModuleConf(app_name)
  117. };
  118. Modularizer.publish = function(PM2, folder, opts, cb) {
  119. if (opts.npm == true) {
  120. NPM.publish(opts, cb)
  121. }
  122. else {
  123. TAR.publish(PM2, folder, cb)
  124. }
  125. };
  126. Modularizer.generateSample = function(app_name, cb) {
  127. NPM.generateSample(app_name, cb)
  128. };