Skip to content

Commit 4f01ac2

Browse files
committed
fix hash aliases
1 parent c960801 commit 4f01ac2

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

lib/AliasPlugin.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"use strict";
77

88
const forEachBail = require("./forEachBail");
9+
const { PathType, getType } = require("./util/path");
910

1011
/** @typedef {import("./Resolver")} Resolver */
1112
/** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
@@ -30,6 +31,25 @@ module.exports = class AliasPlugin {
3031
*/
3132
apply(resolver) {
3233
const target = resolver.ensureHook(this.target);
34+
const cache = {};
35+
const getAbsolutePathWithSlashEnding = maybeAbsolutePath => {
36+
if (cache[maybeAbsolutePath] === undefined) {
37+
const type = getType(maybeAbsolutePath);
38+
if (type === PathType.AbsolutePosix || type === PathType.AbsoluteWin) {
39+
cache[maybeAbsolutePath] = resolver
40+
.join(maybeAbsolutePath, "_")
41+
.slice(0, -1);
42+
} else {
43+
cache[maybeAbsolutePath] = null;
44+
}
45+
}
46+
return cache[maybeAbsolutePath];
47+
};
48+
const isSubPath = (path, maybeSubPath) => {
49+
const absolutePath = getAbsolutePathWithSlashEnding(maybeSubPath);
50+
if (!absolutePath) return false;
51+
return path.startsWith(absolutePath);
52+
};
3353
resolver
3454
.getHook(this.source)
3555
.tapAsync("AliasPlugin", (request, resolveContext, callback) => {
@@ -42,11 +62,9 @@ module.exports = class AliasPlugin {
4262
if (
4363
innerRequest === item.name ||
4464
(!item.onlyModule &&
45-
innerRequest.startsWith(
46-
request.request
47-
? `${item.name}/`
48-
: resolver.join(item.name, "_").slice(0, -1)
49-
))
65+
(request.request
66+
? innerRequest.startsWith(`${item.name}/`)
67+
: isSubPath(innerRequest, item.name)))
5068
) {
5169
const remainingRequest = innerRequest.substr(item.name.length);
5270
const resolveWithAlias = (alias, callback) => {

test/alias.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ describe("alias", function () {
3939
recursive: "recursive/dir",
4040
"/d/dir": "/c/dir",
4141
"/d/index.js": "/c/index",
42+
// alias configuration should work
43+
"#": "/c/dir",
44+
"@": "/c/dir",
4245
ignored: false
4346
},
4447
modules: "/",

0 commit comments

Comments
 (0)