mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.8 KiB
67 lines
1.8 KiB
var spawn = require("child_process").spawn
|
|
var path = require("path")
|
|
var fs = require("fs")
|
|
|
|
var port = exports.port = 1337
|
|
exports.registry = "http://localhost:" + port
|
|
process.env.npm_config_loglevel = "error"
|
|
|
|
var npm_config_cache = path.resolve(__dirname, "npm_cache")
|
|
exports.npm_config_cache = npm_config_cache
|
|
|
|
var bin = exports.bin = require.resolve("../bin/npm-cli.js")
|
|
var once = require("once")
|
|
|
|
exports.npm = function (cmd, opts, cb) {
|
|
cb = once(cb)
|
|
cmd = [bin].concat(cmd)
|
|
opts = opts || {}
|
|
|
|
opts.env = opts.env ? opts.env : process.env
|
|
if (!opts.env.npm_config_cache) {
|
|
opts.env.npm_config_cache = npm_config_cache
|
|
}
|
|
|
|
var stdout = ""
|
|
, stderr = ""
|
|
, node = process.execPath
|
|
, child = spawn(node, cmd, opts)
|
|
|
|
if (child.stderr) child.stderr.on("data", function (chunk) {
|
|
stderr += chunk
|
|
})
|
|
|
|
if (child.stdout) child.stdout.on("data", function (chunk) {
|
|
stdout += chunk
|
|
})
|
|
|
|
child.on("error", cb)
|
|
|
|
child.on("close", function (code) {
|
|
cb(null, code, stdout, stderr)
|
|
})
|
|
return child
|
|
}
|
|
|
|
// based on http://bit.ly/1tkI6DJ
|
|
function deleteNpmCacheRecursivelySync(cache) {
|
|
cache = cache ? cache : npm_config_cache
|
|
var files = []
|
|
var res
|
|
if( fs.existsSync(cache) ) {
|
|
files = fs.readdirSync(cache)
|
|
files.forEach(function(file,index) {
|
|
var curPath = path.resolve(cache, file)
|
|
if(fs.lstatSync(curPath).isDirectory()) { // recurse
|
|
deleteNpmCacheRecursivelySync(curPath)
|
|
} else { // delete file
|
|
if (res = fs.unlinkSync(curPath))
|
|
throw Error("Failed to delete file " + curPath + ", error " + res)
|
|
}
|
|
})
|
|
if (res = fs.rmdirSync(cache))
|
|
throw Error("Failed to delete directory " + cache + ", error " + res)
|
|
}
|
|
return 0
|
|
}
|
|
exports.deleteNpmCacheRecursivelySync = deleteNpmCacheRecursivelySync
|