From 339e85dd827651bf9659f3d9299674c6ecd63219 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Fri, 17 Aug 2018 14:23:02 +0800 Subject: [PATCH] fetch the module version (#22) --- lib/require-module-hook.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/require-module-hook.js b/lib/require-module-hook.js index 55011cb..508bcbf 100644 --- a/lib/require-module-hook.js +++ b/lib/require-module-hook.js @@ -20,6 +20,7 @@ const Module = require("module"); const resolve = require("resolve"); const path = require("path"); +const fs = require("fs"); module.exports = hook; @@ -38,7 +39,8 @@ function hook(modules, requireCallback) { let moduleName = ""; let matchModuleName = ""; let enhanceFile = ""; - let version = ""; + let version = undefined; + let basedir = undefined; if (enhancedModuleCache.hasOwnProperty(filename)) { return enhancedModuleCache[filename]; @@ -56,7 +58,7 @@ function hook(modules, requireCallback) { moduleName = isWithScope ? pathSegment[index + 1] + "/" + pathSegment[index + 2] : pathSegment[index + 1]; - let basedir = pathSegment.slice(0, index + (isWithScope ? 3 : 2)).join(path.sep); + basedir = pathSegment.slice(0, index + (isWithScope ? 3 : 2)).join(path.sep); try { let res = resolve.sync(moduleName, {basedir: basedir}); if (res !== filename) { @@ -73,6 +75,17 @@ function hook(modules, requireCallback) { } if (modules && modules.indexOf(matchModuleName) === -1) return exports; + + // get version. Because of we enhance Module.prototype.require, so we can't fetch the version by execute + // `require(basedir + path.sep + "package.json")` method + if (basedir) { + const packageJson = path.join(basedir, "package.json"); + try { + version = JSON.parse(fs.readFileSync(packageJson)).version; + } catch (e) { + } + } + if (!enhancedModuleCache.hasOwnProperty(filename)) { enhancedModuleCache[filename] = exports; enhancedModuleCache[filename] = requireCallback(exports, moduleName, version, enhanceFile); -- GitLab