Skip to content

[jest-resolve] Prevent default resolver failure when potential resolution directory does not exist#4483

Merged
cpojer merged 1 commit into
jestjs:masterfrom
wschurman:better_error_message
Sep 15, 2017
Merged

[jest-resolve] Prevent default resolver failure when potential resolution directory does not exist#4483
cpojer merged 1 commit into
jestjs:masterfrom
wschurman:better_error_message

Conversation

@wschurman

@wschurman wschurman commented Sep 14, 2017

Copy link
Copy Markdown
Contributor

Summary

A recent change to take precedence of NODE_PATH for module resolution (#4453) made this issue more likely to occur since NODE_PATH could contain non-existent directories. While this could have occurred prior to the change, it was less likely since it is more common that modules are in local node_modules.

Either way, non-existent directories should be treated the same way as non-existent files during module resolution. The equivalent case for statSync returning ENOENT for files is ENOTDIR for directories. We may want to add ENOTDIR to isFile as well.

Test plan

  1. yarn test
  2. Link cli into another project, export NODE_PATH environment variable as a non-existent directory, no longer see cryptic Cannot find module error. Instead, it now resolves to a potential path further down the path list.

Additional Context

One other potential fix would be to propagate these exceptions up to the Resolver.findNodeModule callsites. Currently, this method absorbs all exceptions though, and since it is used externally by jest-config, I figured keeping the existing non-throwing API was preferable.

…tion directory does not exist

Summary: A recent change to take precedence of NODE_PATH for module resolution (jestjs#4453) made this issue more likely to occur since NODE_PATH could contain non-existent directories. While this could have occurred prior to the change, it was less likely since it is more common that modules are in local `node_modules`.

Either way, non-existent directories should be treated the same way as non-existent files during module resolution. The equivalent case for `statSync` returning `ENOENT` for files is `ENOTDIR` for directories. We may want to add `ENOTDIR` to `isFile` as well.

Test Plan:
1. `yarn test`
2. Link cli into another project, set NODE_PATH to non-existent directories, no longer see cryptic `Cannot find module` error. Instead, it now resolves to a potential path further down the path list.
@cpojer cpojer merged commit 3aebe4f into jestjs:master Sep 15, 2017
@cpojer

cpojer commented Sep 15, 2017

Copy link
Copy Markdown
Member

Sure. A test would be nice.

tabrindle pushed a commit to tabrindle/jest that referenced this pull request Oct 2, 2017
…tion directory does not exist (jestjs#4483)

Summary: A recent change to take precedence of NODE_PATH for module resolution (jestjs#4453) made this issue more likely to occur since NODE_PATH could contain non-existent directories. While this could have occurred prior to the change, it was less likely since it is more common that modules are in local `node_modules`.

Either way, non-existent directories should be treated the same way as non-existent files during module resolution. The equivalent case for `statSync` returning `ENOENT` for files is `ENOTDIR` for directories. We may want to add `ENOTDIR` to `isFile` as well.

Test Plan:
1. `yarn test`
2. Link cli into another project, set NODE_PATH to non-existent directories, no longer see cryptic `Cannot find module` error. Instead, it now resolves to a potential path further down the path list.
@github-actions

Copy link
Copy Markdown

This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
Please note this issue tracker is not a help forum. We recommend using StackOverflow or our discord channel for questions.

@github-actions github-actions Bot locked as resolved and limited conversation to collaborators May 13, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants