From be11590dbe1275e430fe637e51e27bd6d7587442 Mon Sep 17 00:00:00 2001 From: gsuess Date: Wed, 21 Jan 2015 23:44:51 +0100 Subject: [PATCH 1/6] Fix Npm.require() package sub-modules. --- tools/server/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/server/boot.js b/tools/server/boot.js index a8cc49bf1c..7d470d4cc8 100644 --- a/tools/server/boot.js +++ b/tools/server/boot.js @@ -130,7 +130,7 @@ Fiber(function () { } var nodeModuleDir = - path.resolve(serverDir, fileInfo.node_modules, name); + path.resolve(serverDir, fileInfo.node_modules, name.split("/")[0]); if (fs.existsSync(nodeModuleDir)) { return require(nodeModuleDir); From 2bd8eae66b0c13fc7deeeb473a71bd14bec90d9c Mon Sep 17 00:00:00 2001 From: gsuess Date: Thu, 22 Jan 2015 00:08:54 +0100 Subject: [PATCH 2/6] Npm.require load correct submodule --- tools/server/boot.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/server/boot.js b/tools/server/boot.js index 7d470d4cc8..95940d3e66 100644 --- a/tools/server/boot.js +++ b/tools/server/boot.js @@ -129,10 +129,11 @@ Fiber(function () { return require(name); } - var nodeModuleDir = - path.resolve(serverDir, fileInfo.node_modules, name.split("/")[0]); + var nodeModuleBase = path.resolve(serverDir, fileInfo.node_modules); - if (fs.existsSync(nodeModuleDir)) { + var nodeModuleDir = path.resolve(nodeModuleBase, name); + + if (fs.existsSync(path.resolve(nodeModuleBase, name.split("/")[0]))) { return require(nodeModuleDir); } try { From d4e1f80bf737d18039a83e58b6468b3b772ffa59 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 23 Jan 2015 16:43:52 -0800 Subject: [PATCH 3/6] Add a comment --- tools/server/boot.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/server/boot.js b/tools/server/boot.js index 95940d3e66..917b9a780e 100644 --- a/tools/server/boot.js +++ b/tools/server/boot.js @@ -133,9 +133,13 @@ Fiber(function () { var nodeModuleDir = path.resolve(nodeModuleBase, name); + // If the user does `Npm.require('foo/bar')`, then we should resolve to + // the package's node modules if `foo` was one of the modules we + // installed. (`foo/bar` might be implemented as `foo/bar.js` so we + // can't just naively see if all of nodeModuleDir exists. if (fs.existsSync(path.resolve(nodeModuleBase, name.split("/")[0]))) { return require(nodeModuleDir); - } + } try { return require(name); } catch (e) { From 806ecd827b0d9f1fa236125bf017e22123d7978a Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 23 Jan 2015 16:44:02 -0800 Subject: [PATCH 4/6] Support Npm.require('foo/bar') in JsImage.load (ie, plugins and isopackets) --- tools/bundler.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/bundler.js b/tools/bundler.js index b2b46bb1e7..6edc039dab 100644 --- a/tools/bundler.js +++ b/tools/bundler.js @@ -1319,8 +1319,10 @@ _.extend(JsImage.prototype, { var nodeModuleDir = files.pathJoin(item.nodeModulesDirectory.sourcePath, name); - - if (files.exists(nodeModuleDir)) { + var nodeModuleTopDir = + files.pathJoin(item.nodeModulesDirectory.sourcePath, + name.split("/")[0]); + if (files.exists(nodeModuleTopDir)) { return require(nodeModuleDir); } From 71af635a2579f0ce9914951c3ce5455f21d482ca Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 23 Jan 2015 16:47:49 -0800 Subject: [PATCH 5/6] improve JsImage.load Npm.require errors - Use buildmessage (skips stack trace) - Drop extraneous trailing single quote - Say "from" instead of "while loading" since this can also happen when running code from the file after load time --- tools/bundler.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/bundler.js b/tools/bundler.js index 6edc039dab..95a3529bd7 100644 --- a/tools/bundler.js +++ b/tools/bundler.js @@ -1329,9 +1329,10 @@ _.extend(JsImage.prototype, { try { return require(name); } catch (e) { - throw new Error("Can't load npm module '" + name + - "' while loading " + item.targetPath + - ". Check your Npm.depends().'"); + buildmessage.error( + "Can't load npm module '" + name + "' from " + + item.targetPath + ". Check your Npm.depends()."); + return undefined; } } }, From 6bb55160100920d58a26fbbb42493eefe09f5433 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 23 Jan 2015 16:49:19 -0800 Subject: [PATCH 6/6] history update --- History.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/History.md b/History.md index b884b41c5d..aabdd4a7ce 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,7 @@ +## vNEXT + +* Support `Npm.require('foo/bar')`. #3505 #3526 + ## v.1.0.3.1, 2015-Jan-20 * Rewrite `meteor show` and `meteor search` to show package information for