Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2010-03-05 10:02:20 +0300
committerisaacs <i@izs.me>2010-03-05 10:02:20 +0300
commit509ee5ac4c18cfa2421b3a16969c69680e5c9495 (patch)
tree8c32ff5ce92bcd6c16d1d75ada6b0193c9c77f12
parent73a3ed3b1d475275e85ede08e0e58a89edc0df29 (diff)
Use the "bin" field rather than the install/activate scripts.
-rw-r--r--lib/activate.js15
-rw-r--r--lib/build.js26
-rw-r--r--lib/deactivate.js7
-rw-r--r--package.json8
-rwxr-xr-xscripts/activate.js17
-rwxr-xr-xscripts/bootstrap.js12
-rwxr-xr-xscripts/deactivate.js12
-rwxr-xr-xscripts/install.js19
-rwxr-xr-xscripts/uninstall.js12
9 files changed, 47 insertions, 81 deletions
diff --git a/lib/activate.js b/lib/activate.js
index 3f4e8bfcb..63ab739c4 100644
--- a/lib/activate.js
+++ b/lib/activate.js
@@ -61,6 +61,7 @@ function activate (pkg, version, cb) {
link(fromLib, toLib, cb);
});
}],
+ [linkBins, data],
[lifecycle, data, "activate"],
[lifecycle, data, "postactivate"],
cb
@@ -74,8 +75,20 @@ function link (from, to, cb) {
chain(
[fs, "stat", from],
// todo: implicit deactivation rather than this crude clobbering.
- [function (cb) { rm(to, function () { cb() }) }],
+ [rm, to],
[fs, "symlink", from, to],
cb
);
}
+
+function linkBins (pkg, cb) {
+ if (!pkg.bin) return cb();
+ var steps = [];
+ for (var i in pkg.bin) {
+ var to = path.join(process.installPrefix, "bin", i),
+ from = to+"-"+pkg.version;
+ steps.push([link, from, to]);
+ }
+ steps.push(cb);
+ chain(steps);
+}
diff --git a/lib/build.js b/lib/build.js
index 0d1309674..b616271c6 100644
--- a/lib/build.js
+++ b/lib/build.js
@@ -58,6 +58,9 @@ function build (pkg, cb) {
// symlink ROOT/{name}-{version}/ to ROOT/.npm/{name}/{version}/{lib}
[linkLib, pkg],
+ // symlink any bins into the node install prefix
+ [linkBins, pkg],
+
// run the "install" lifecycle script
[lifecycle, pkg, "install"],
[lifecycle, pkg, "postinstall"],
@@ -73,6 +76,7 @@ function build (pkg, cb) {
}
function readAndBuild (folder, cb) {
+ log("readAndBuild", "build");
readJson(path.join(folder, "package.json"), function (er, data) {
if (er) cb(er);
else build(data, cb);
@@ -125,7 +129,7 @@ function resolveDependencies (pkg, topCb) {
var deps = found.slice(0);
(function L (dep) {
if (!dep) return cb();
- // link from ROOT/.npm/{dep.name}/{dep.version}/dependents/{pkg}-{ver}
+ // link from ROOT/.npm/{dep.name}/{dep.version}/dependents/{pkg}-{version}
// to the package folder being installed.
var dependents = path.join(npm.dir, dep.name, dep.version, "dependents"),
to = path.join(dependents, pkg.name + "-" + pkg.version),
@@ -255,3 +259,23 @@ function linkMain (pkg, cb) {
});
}
+function linkBins (pkg, cb) {
+ if (!pkg.bin) return cb();
+ var steps = [];
+ for (var i in pkg.bin) {
+ var to = path.join(process.installPrefix, "bin", i+"-"+pkg.version),
+ from = path.join(npm.dir, pkg.name, pkg.version, "package", pkg.bin[i]);
+ steps.push([link, from, to]);
+ }
+ steps.push(cb);
+ chain.apply(null, steps);
+}
+function link (from, to, cb) {
+ chain(
+ [fs, "stat", from],
+ // todo: implicit deactivation rather than this crude clobbering.
+ [rm, to],
+ [fs, "symlink", from, to],
+ cb
+ );
+}
diff --git a/lib/deactivate.js b/lib/deactivate.js
index d5464cc76..35d6325f6 100644
--- a/lib/deactivate.js
+++ b/lib/deactivate.js
@@ -31,6 +31,13 @@ function deactivate (pkg, cb) {
[rm, active],
[function (cb) { rm(activeMain, function () { cb() }) }],
[function (cb) { rm(activeLib, function () { cb() }) }],
+ [function (cb) {
+ if (!data.bin) return cb();
+ chain(Object.getOwnPropertyNames(data.bin)
+ .map(function (bin) {
+ return [rm, path.join(process.installPrefix, "bin", bin)];
+ }).concat(cb));
+ }],
[lifecycle, data, "postdeactivate"],
cb
);
diff --git a/package.json b/package.json
index b70416a71..468e6d78d 100644
--- a/package.json
+++ b/package.json
@@ -2,13 +2,7 @@
, "description" : "A package manager for node"
, "version" : "0.0.4beta"
, "author" : "Isaac Z. Schlueter <i@izs.me>"
-, "directories" : { "lib" : "lib" }
+, "directories" : { "lib" : "./lib/" }
, "main" : "./npm"
, "bin" : { "npm" : "./cli.js" }
-, "scripts" :
- { "install" : "scripts/install.js"
- , "uninstall" : "scripts/uninstall.js"
- , "activate" : "scripts/activate.js"
- , "deactivate" : "scripts/deactivate.js"
- }
}
diff --git a/scripts/activate.js b/scripts/activate.js
deleted file mode 100755
index 847e90cf1..000000000
--- a/scripts/activate.js
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/local/bin/node
-var fs = require("fs"),
- version = process.env.npm_package_version,
- bin = "/usr/local/bin/npm",
- versionedBin = "/usr/local/bin/npm-"+version;
-
-fs.lstat(bin, function (er, st) {
- if (!er) fs.unlink(bin, linkBin);
- else linkBin();
-});
-
-function linkBin (er) {
- if (er) throw er;
- fs.symlinkSync(versionedBin, bin, function (er) {
- if (er) throw er;
- });
-}
diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js
deleted file mode 100755
index 0e3a9c7fc..000000000
--- a/scripts/bootstrap.js
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env node
-
-var sys = require("sys");
-
-function print (m, cr) { process.stdio.writeError(m+(cr===false?"":"\n")); return print }
-
-require("../npm").install("http://github.com/isaacs/npm/tarball/master", function (er, ok) {
- if (er) {
- sys.error("\nFailed after "+ok.length+" step(s)\n");
- throw er;
- } else print("It worked!");
-});
diff --git a/scripts/deactivate.js b/scripts/deactivate.js
deleted file mode 100755
index 2b8d62dea..000000000
--- a/scripts/deactivate.js
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/local/bin/node
-
-var fs = require("fs"),
- version = process.env.npm_package_version,
- bin = "/usr/local/bin/npm";
-
-fs.lstat(bin, function (er, st) {
- if (er) return;
- fs.unlink(bin, function (er) {
- if (er) throw er;
- });
-});
diff --git a/scripts/install.js b/scripts/install.js
deleted file mode 100755
index b160d4d5c..000000000
--- a/scripts/install.js
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/local/bin/node
-
-var fs = require("fs"),
- version = process.env.npm_package_version,
- bin = "/usr/local/bin/npm-"+version,
- clijs = require("path").join(process.cwd(), "cli.js"),
- sys = require("sys");
-
-fs.lstat(bin, function (er, st) {
- if (!er) fs.unlink(bin, linkBin);
- else linkBin();
-});
-
-function linkBin (er) {
- if (er) throw er;
- fs.symlinkSync(clijs, bin, function (er) {
- if (er) throw er;
- });
-}
diff --git a/scripts/uninstall.js b/scripts/uninstall.js
deleted file mode 100755
index 16ac33242..000000000
--- a/scripts/uninstall.js
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/local/bin/node
-
-var fs = require("fs"),
- version = process.env.npm_package_version,
- versionedBin = "/usr/local/bin/npm-"+version;
-
-fs.lstat(versionedBin, function (er, st) {
- if (er) return;
- fs.unlink(versionedBin, function (er) {
- if (er) throw er;
- });
-});