Skip to content

Commit 2890498

Browse files
gaearoncpojer
authored andcommitted
Preserve module identity for symlinks (#4761)
* Preserve module identity for symlinks * Add changelog entry * Remove unintentional whitespace change * Revert integration test to undebuggable state
1 parent 8c5e870 commit 2890498

3 files changed

Lines changed: 12 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* `[jest-message-util]` Always remove node internals from stacktraces ([#4695](https://github.com/facebook/jest/pull/4695))
1616
* `[jest-resolve]` changes method of determining builtin modules to include missing builtins ([#4740](https://github.com/facebook/jest/pull/4740))
1717
* `[pretty-format]` Prevent error in pretty-format for window in jsdom test env ([#4750](https://github.com/facebook/jest/pull/4750))
18+
* `[jest-resolve]` Preserve module identity for symlinks ([#4761](https://github.com/facebook/jest/pull/4761))
1819

1920
### Features
2021
* `[jest-environment-*]` [**BREAKING**] Add Async Test Environment APIs, dispose is now teardown ([#4506](https://github.com/facebook/jest/pull/4506))

integration_tests/resolve/__tests__/resolve.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,9 @@ test('should resolve filename.json', () => {
5656
expect(testRequire('../test4')).not.toThrow();
5757
expect(platform.extension).toBe('json');
5858
});
59+
60+
test('should preserve identity for symlinks', () => {
61+
expect(require('../../../packages/jest-resolve')).toBe(
62+
require('jest-resolve')
63+
);
64+
});

packages/jest-resolve/src/default_resolver.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ function resolveSync(target: Path, options: ResolverOptions): Path {
9494
if (isDirectory(dir)) {
9595
result = resolveAsFile(name) || resolveAsDirectory(name);
9696
}
97+
if (result) {
98+
// Dereference symlinks to ensure we don't create a separate
99+
// module instance depending on how it was referenced.
100+
result = fs.realpathSync(result);
101+
}
97102
return result;
98103
}
99104

0 commit comments

Comments
 (0)