Skip to content

Commit 412e2eb

Browse files
authored
fix: improve tag dir scanning cache (#1859)
1 parent 945226e commit 412e2eb

File tree

5 files changed

+41
-20
lines changed

5 files changed

+41
-20
lines changed

packages/marko/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/marko/src/taglib/taglib-finder/index.js

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ var taglibLoader = require("../taglib-loader");
33
var nodePath = require("path");
44
var lassoPackageRoot = require("lasso-package-root");
55
var resolveFrom = require("resolve-from");
6-
var scanTagsDir = require("../taglib-loader/scanTagsDir");
7-
var DependencyChain = require("../taglib-loader/DependencyChain");
86
var lassoCachingFS = require("lasso-caching-fs");
97

108
var findCache = {};
@@ -69,9 +67,6 @@ function find(dirname, registeredTaglibs) {
6967
var added = {};
7068

7169
var helper = {
72-
alreadyAdded: function(taglibId) {
73-
return added.hasOwnProperty(taglibId);
74-
},
7570
addTaglib: function(taglib) {
7671
if (added[taglib.id]) {
7772
return;
@@ -105,20 +100,8 @@ function find(dirname, registeredTaglibs) {
105100
if (!taglib || taglib.tagsDir === undefined) {
106101
let componentsPath = nodePath.join(curDirname, "components");
107102

108-
if (
109-
existsCached(componentsPath) &&
110-
!excludedDirs[componentsPath] &&
111-
!helper.alreadyAdded(componentsPath)
112-
) {
113-
let taglib = taglibLoader.createTaglib(componentsPath);
114-
scanTagsDir(
115-
componentsPath,
116-
nodePath.dirname(componentsPath),
117-
"components",
118-
taglib,
119-
new DependencyChain([componentsPath])
120-
);
121-
helper.addTaglib(taglib);
103+
if (existsCached(componentsPath) && !excludedDirs[componentsPath]) {
104+
helper.addTaglib(taglibLoader.loadTaglibFromDir(curDirname));
122105
}
123106
}
124107
}

packages/marko/src/taglib/taglib-loader/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ function loadTaglibFromFile(filePath) {
1212
return loaders.loadTaglibFromFile(filePath);
1313
}
1414

15+
function loadTaglibFromDir(filePath) {
16+
return loaders.loadTaglibFromDir(filePath);
17+
}
18+
1519
function clearCache() {
1620
cache.clear();
1721
}
@@ -34,4 +38,5 @@ exports.clearCache = clearCache;
3438
exports.createTaglib = createTaglib;
3539
exports.loadTaglibFromProps = loadTaglibFromProps;
3640
exports.loadTaglibFromFile = loadTaglibFromFile;
41+
exports.loadTaglibFromDir = loadTaglibFromDir;
3742
exports.loadTag = loadTag;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var nodePath = require("path");
2+
var types = require("./types");
3+
var cache = require("./cache");
4+
var DependencyChain = require("./DependencyChain");
5+
var scanTagsDir = require("./scanTagsDir");
6+
7+
var ok = require("assert").ok;
8+
9+
function loadFromDir(dir) {
10+
ok(dir, '"dir" is required');
11+
12+
var componentsPath = nodePath.join(dir, "components");
13+
var taglib = cache.get(componentsPath);
14+
15+
// Only load a taglib once by caching the loaded taglibs using the file
16+
// system file path as the key
17+
if (!taglib) {
18+
taglib = new types.Taglib(componentsPath);
19+
cache.put(componentsPath, taglib);
20+
scanTagsDir(
21+
componentsPath,
22+
dir,
23+
"components",
24+
taglib,
25+
new DependencyChain([componentsPath])
26+
);
27+
}
28+
29+
return taglib;
30+
}
31+
32+
module.exports = loadFromDir;

packages/marko/src/taglib/taglib-loader/loaders.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ exports.loadTagFromProps = require("./loadTagFromProps");
1818
exports.loadTagFromFile = require("./loadTagFromFile");
1919
exports.loadTaglibFromProps = require("./loadTaglibFromProps");
2020
exports.loadTaglibFromFile = require("./loadTaglibFromFile");
21+
exports.loadTaglibFromDir = require("./loadTaglibFromDir");
2122
exports.loadAttributes = require("./loadAttributes");
2223
exports.isSupportedAttributeProperty = isSupportedAttributeProperty;
2324
exports.isSupportedTagProperty = isSupportedTagProperty;

0 commit comments

Comments
 (0)