Skip to content

Commit

Permalink
refactor the installer logic
Browse files Browse the repository at this point in the history
  • Loading branch information
watilde committed Jul 24, 2017
1 parent 23d3997 commit 6a95f3c
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 28 deletions.
46 changes: 18 additions & 28 deletions lib/install/installer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,35 @@ const { URL } = require('url')
const path = require('path')
const nm = require('../utils/nm')
const bin = require('./bin')
const registry = require('./installer/registry')

const installer = (dep, deps, base, resolve, reject) => {
mkdirp.sync(nm)
mkdirp.sync(path.join(nm, '.bin'))

const target = (base.length === 0)
? path.join(nm, dep)
: path.join(nm, base.join('/'), 'node_modules', dep)
const url = new URL(deps[dep].tarball)
mkdirp.sync(target)

https.get({
host: url.host,
path: url.pathname,
headers: npmrc.userAgent
}, (res) => {
res.pipe(
tar.extract({
cwd: target,
sync: true,
strip: 1
})
)
res.on('end', () => {
global.dependenciesCount += 1
bin(dep, target)
if (!deps[dep].dependencies) return resolve()
const tasks = Object.keys(deps[dep].dependencies).map((item) => {
const list = deps[dep].dependencies
let keys = [].concat(base, dep)
if (keys.length > 1) keys.splice(-1, 0, 'node_modules')
return new Promise((resolve, reject) => {
installer(item, list, keys, resolve, reject)
})
})
Promise.all(tasks).then(() => {
resolve()
const pkg = deps[dep]
let fetch = registry(pkg, target)
fetch.then(() => {
global.dependenciesCount += 1
bin(dep, target)
if (!pkg.dependencies) return resolve()
const tasks = Object.keys(pkg.dependencies).map((item) => {
const list = pkg.dependencies
let keys = [].concat(base, dep)
if (keys.length > 1) keys.splice(-1, 0, 'node_modules')
return new Promise((resolve, reject) => {
installer(item, list, keys, resolve, reject)
})
})
}).on('error', reject)
Promise.all(tasks).then(() => {
resolve()
})
})
}

module.exports = (deps) => {
Expand Down
30 changes: 30 additions & 0 deletions lib/install/installer/registry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const https = require('https')
const mkdirp = require('mkdirp')
const tar = require('tar')
const { URL } = require('url')
const path = require('path')
const npmrc = require('../../utils/npmrc')
const nm = require('../../utils/nm')
const bin = require('../bin')

module.exports = (pkg, cwd) => {
const url = new URL(pkg.tarball)
return new Promise((resolve, reject) => {
https.get({
host: url.host,
path: url.pathname,
headers: npmrc.userAgent
}, (res) => {
res.pipe(
tar.extract({
cwd: cwd,
sync: true,
strip: 1
})
)
res.on('end', () => {
resolve()
})
}).on('error', reject)
})
}

0 comments on commit 6a95f3c

Please sign in to comment.