提交 339e85dd 编写于 作者: X Xin,Zhang 提交者: wu-sheng

fetch the module version (#22)

上级 95815a08
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
const Module = require("module"); const Module = require("module");
const resolve = require("resolve"); const resolve = require("resolve");
const path = require("path"); const path = require("path");
const fs = require("fs");
module.exports = hook; module.exports = hook;
...@@ -38,7 +39,8 @@ function hook(modules, requireCallback) { ...@@ -38,7 +39,8 @@ function hook(modules, requireCallback) {
let moduleName = ""; let moduleName = "";
let matchModuleName = ""; let matchModuleName = "";
let enhanceFile = ""; let enhanceFile = "";
let version = ""; let version = undefined;
let basedir = undefined;
if (enhancedModuleCache.hasOwnProperty(filename)) { if (enhancedModuleCache.hasOwnProperty(filename)) {
return enhancedModuleCache[filename]; return enhancedModuleCache[filename];
...@@ -56,7 +58,7 @@ function hook(modules, requireCallback) { ...@@ -56,7 +58,7 @@ function hook(modules, requireCallback) {
moduleName = isWithScope ? moduleName = isWithScope ?
pathSegment[index + 1] + "/" + pathSegment[index + 2] : pathSegment[index + 1] + "/" + pathSegment[index + 2] :
pathSegment[index + 1]; 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 { try {
let res = resolve.sync(moduleName, {basedir: basedir}); let res = resolve.sync(moduleName, {basedir: basedir});
if (res !== filename) { if (res !== filename) {
...@@ -73,6 +75,17 @@ function hook(modules, requireCallback) { ...@@ -73,6 +75,17 @@ function hook(modules, requireCallback) {
} }
if (modules && modules.indexOf(matchModuleName) === -1) return exports; 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)) { if (!enhancedModuleCache.hasOwnProperty(filename)) {
enhancedModuleCache[filename] = exports; enhancedModuleCache[filename] = exports;
enhancedModuleCache[filename] = requireCallback(exports, moduleName, version, enhanceFile); enhancedModuleCache[filename] = requireCallback(exports, moduleName, version, enhanceFile);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册