pm2
Version:
Production process manager for Node.JS applications with a built-in load balancer.
49 lines (41 loc) • 1.48 kB
JavaScript
const { ServiceManager } = require('../serviceManager')
const Debug = require('debug')
const Configuration = require('../configuration')
const { readFile } = require('fs')
class DependenciesFeature {
constructor () {
this.transport = undefined
this.logger = Debug('axm:features:dependencies')
}
init () {
this.transport = ServiceManager.get('transport')
this.logger('init')
const pkgPath = Configuration.findPackageJson()
if (typeof pkgPath !== 'string') return this.logger('failed to found pkg.json path')
this.logger(`found pkg.json in ${pkgPath}`)
readFile(pkgPath, (err, data) => {
if (err) return this.logger('failed to read pkg.json', err)
try {
const pkg = JSON.parse(data.toString())
if (typeof pkg.dependencies !== 'object') {
return this.logger('failed to find deps in pkg.json')
}
const dependencies = Object.keys(pkg.dependencies)
.reduce((list, name) => {
list[name] = { version: pkg.dependencies[name] }
return list
}, {})
this.logger(`collected ${Object.keys(dependencies).length} dependencies`)
this.transport.send('application:dependencies', dependencies)
this.logger('sent dependencies list')
} catch (err) {
return this.logger('failed to parse pkg.json', err)
}
})
}
destroy () {
this.logger('destroy')
}
}
module.exports = { DependenciesFeature }