avoid importing npm until required

This commit is contained in:
Eugene Pankov
2019-02-17 13:02:56 +01:00
parent 6b56155ca5
commit 128aa618f0

View File

@@ -1,4 +1,3 @@
import npm from 'npm'
import axios from 'axios' import axios from 'axios'
import { Observable, from } from 'rxjs' import { Observable, from } from 'rxjs'
import { map } from 'rxjs/operators' import { map } from 'rxjs/operators'
@@ -29,21 +28,33 @@ export class PluginManagerService {
installedPlugins: IPluginInfo[] = (window as any).installedPlugins installedPlugins: IPluginInfo[] = (window as any).installedPlugins
private npmReady: Promise<void> private npmReady: Promise<void>
private npm: any
constructor ( constructor (
log: LogService, log: LogService,
) { ) {
this.logger = log.create('pluginManager') this.logger = log.create('pluginManager')
this.npmReady = new Promise(resolve => { }
npm.load({
prefix: this.userPluginsPath, async getNPM () {
}, err => { if (!this.npm) {
if (err) { if (!this.npmReady) {
this.logger.error(err) this.npmReady = new Promise(resolve => {
} const npm = (window as any).nodeRequire('npm')
resolve() npm.load({
}) prefix: this.userPluginsPath,
}) }, err => {
if (err) {
this.logger.error(err)
}
this.npm = npm
resolve()
})
})
}
await this.npmReady
}
return this.npm
} }
listAvailable (query?: string): Observable<IPluginInfo[]> { listAvailable (query?: string): Observable<IPluginInfo[]> {
@@ -68,8 +79,7 @@ export class PluginManagerService {
} }
async installPlugin (plugin: IPluginInfo) { async installPlugin (plugin: IPluginInfo) {
await this.npmReady (await this.getNPM()).commands.install([`${plugin.packageName}@${plugin.version}`], err => {
npm.commands.install([`${plugin.packageName}@${plugin.version}`], err => {
if (err) { if (err) {
this.logger.error(err) this.logger.error(err)
} }
@@ -79,8 +89,7 @@ export class PluginManagerService {
} }
async uninstallPlugin (plugin: IPluginInfo) { async uninstallPlugin (plugin: IPluginInfo) {
await this.npmReady (await this.getNPM()).commands.remove([plugin.packageName], err => {
npm.commands.remove([plugin.packageName], err => {
if (err) { if (err) {
this.logger.error(err) this.logger.error(err)
} }