mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Adding better caching of taglib lookup in node_modules directory
This commit is contained in:
parent
bb5314e633
commit
538ff0b336
@ -9,6 +9,7 @@ exports.registeredTaglibs = [];
|
||||
var lookupCache = {};
|
||||
var discoverCache = {};
|
||||
var excludedDirs = {};
|
||||
var taglibsByPath = {};
|
||||
|
||||
function existsCached(path) {
|
||||
var exists = existsCache[path];
|
||||
@ -32,9 +33,21 @@ function tryNodeModules(parent, discovered) {
|
||||
if (nodePath.basename(parent) === 'node_modules') {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var nodeModulesDir = nodePath.join(parent, 'node_modules');
|
||||
|
||||
var taglibs = taglibsByPath[nodeModulesDir];
|
||||
if (taglibs !== undefined) {
|
||||
if (taglibs !== null) {
|
||||
for (var i = 0, len = taglibs.length; i < len; i++) {
|
||||
discovered.push(taglibs[i]);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (existsCached(nodeModulesDir)) {
|
||||
taglibs = [];
|
||||
var children = fs.readdirSync(nodeModulesDir);
|
||||
children.forEach(function(moduleDirBasename) {
|
||||
var moduleDir = nodePath.join(nodeModulesDir, moduleDirBasename);
|
||||
@ -44,9 +57,14 @@ function tryNodeModules(parent, discovered) {
|
||||
if (existsCached(taglibPath)) {
|
||||
var taglib = taglibLoader.load(taglibPath);
|
||||
taglib.moduleName = moduleDirBasename;
|
||||
taglibs.push(taglib);
|
||||
discovered.push(taglib);
|
||||
}
|
||||
});
|
||||
|
||||
taglibsByPath[nodeModulesDir] = taglibs.length ? taglibs : null;
|
||||
} else {
|
||||
taglibsByPath[nodeModulesDir] = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,12 +72,13 @@ function discoverHelper(dirname, discovered) {
|
||||
|
||||
if (!excludedDirs[dirname]) {
|
||||
tryDir(dirname, discovered);
|
||||
tryNodeModules(dirname, discovered);
|
||||
tryNodeModules(dirname, discovered);
|
||||
}
|
||||
|
||||
var parent = nodePath.dirname(dirname);
|
||||
if (parent && parent !== dirname) {
|
||||
discoverHelper(parent, discovered);
|
||||
// TODO: Don't use recursion (there's a simpler way)
|
||||
discoverHelper(parent, discovered);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user