Skip to content

Commit 82f1759

Browse files
authored
Merge pull request #337 from webpack/fix/issue-334
fix hash aliases
2 parents 23c3e7c + 5d90d19 commit 82f1759

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

lib/AliasPlugin.js

Lines changed: 16 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,18 @@ module.exports = class AliasPlugin {
3031
*/
3132
apply(resolver) {
3233
const target = resolver.ensureHook(this.target);
34+
const getAbsolutePathWithSlashEnding = maybeAbsolutePath => {
35+
const type = getType(maybeAbsolutePath);
36+
if (type === PathType.AbsolutePosix || type === PathType.AbsoluteWin) {
37+
return resolver.join(maybeAbsolutePath, "_").slice(0, -1);
38+
}
39+
return null;
40+
};
41+
const isSubPath = (path, maybeSubPath) => {
42+
const absolutePath = getAbsolutePathWithSlashEnding(maybeSubPath);
43+
if (!absolutePath) return false;
44+
return path.startsWith(absolutePath);
45+
};
3346
resolver
3447
.getHook(this.source)
3548
.tapAsync("AliasPlugin", (request, resolveContext, callback) => {
@@ -42,11 +55,9 @@ module.exports = class AliasPlugin {
4255
if (
4356
innerRequest === item.name ||
4457
(!item.onlyModule &&
45-
innerRequest.startsWith(
46-
request.request
47-
? `${item.name}/`
48-
: resolver.join(item.name, "_").slice(0, -1)
49-
))
58+
(request.request
59+
? innerRequest.startsWith(`${item.name}/`)
60+
: isSubPath(innerRequest, item.name)))
5061
) {
5162
const remainingRequest = innerRequest.substr(item.name.length);
5263
const resolveWithAlias = (alias, callback) => {

test/alias.js

Lines changed: 11 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: "/",
@@ -61,6 +64,14 @@ describe("alias", function () {
6164
.resolveSync({}, "/", "aliasA/dir/index")
6265
.should.be.eql("/a/dir/index");
6366
});
67+
it('should resolve "#" alias', () => {
68+
resolver.resolveSync({}, "/", "#").should.be.eql("/c/dir/index");
69+
resolver.resolveSync({}, "/", "#/index").should.be.eql("/c/dir/index");
70+
});
71+
it('should resolve "@" alias', () => {
72+
resolver.resolveSync({}, "/", "@").should.be.eql("/c/dir/index");
73+
resolver.resolveSync({}, "/", "@/index").should.be.eql("/c/dir/index");
74+
});
6475
it("should resolve an ignore module", () => {
6576
resolver.resolveSync({}, "/", "ignored").should.be.eql(false);
6677
});

0 commit comments

Comments
 (0)