UNPKG

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