阅读node中的module.js 有四个关键函数
internalModuleStat
判断是文件夹还是文件 以及是否存在internalModuleReadFile
读取文件内容Module._extensions[".js"]
读取js文件内容Module._extensions['.json']
读取json文件内容
这样扩展cef提供两个函数就可以了
- getPakFile 获取文件内容
- GetPakSourceType 获取文件类型 文件返回0 文件夹返回1 不存在返回-1
改写一下就ok了
//定义虚拟路径
const virualPath = process.cwd() + path.sep + "virualPath";
_internalModuleStat=internalModuleStat;
internalModuleStat = function (reqpath) {
var re = _internalModuleStat(path._makeLong(reqpath));
if (re < 0) {
var basePath = reqpath.replace(virualPath, "").replace(/\\/g, "/").replace(/^\//, "");
re = GetPakSourceType(basePath);
}
return re;
}
_internalModuleReadFile=internalModuleReadFile;
internalModuleReadFile = function(reqpath){
if(reqpath.startsWith(virualPath)){
return getPakFile(reqpath);
}else{
return _internalModuleReadFile(reqpath);
}
}
// Native extension for .js
Module._extensions['.js'] = function (module, filename) {
var content = "";
if (filename.startsWith(virualPath)) {
content = getPakFile(filename);
} else {
content = fs.readFileSync(filename, 'utf8');
}
module._compile(stripBOM(content), filename);
};
// Native extension for .json
Module._extensions['.json'] = function (module, filename) {
var content = "";
if (filename.startsWith(virualPath)) {
content = getPakFile(filename);
} else {
content = fs.readFileSync(filename, 'utf8');
}
try {
module.exports = JSON.parse(stripBOM(content));
} catch (err) {
err.message = filename + ': ' + err.message;
throw err;
}
};
//增加入口require方法
//如果bool为真 表示从虚拟路径查找
Module.require = function (request,bool) {
request=bool?request.replace(/^\.\//g, "./virualPath/"):request;
return Module._load(request);
}
加载虚拟路径下的js文件
NativeModule.require("module").require("./appjs/test",true);
测试运行良好