webpack / enhanced-resolve

Offers an async require.resolve function. It's highly configurable.
MIT License
916 stars 186 forks source link

ExportsFieldPlugin is skipped when dependency is aliased #424

Open ataromoku opened 3 weeks ago

ataromoku commented 3 weeks ago

Hi,

We encountered an issue where enhanced-resolver doesn't handle the exports field in package.json if the alias is used.


Steps to reproduce

  1. NPM Install enhanced-resolver and @brightspace-ui/lms-context-provider
  2. Excecute the code below
const { CachedInputFileSystem, ResolverFactory } = require("enhanced-resolve");
const path = require('path');
const fs = require('fs');

const myResolver = ResolverFactory.createResolver({
  alias: {
     '@brightspace-ui': path.resolve(__dirname, 'node_modules', '@brightspace-ui'),
  },
  fileSystem: new CachedInputFileSystem(fs, 2000)
});

myResolver.resolve({}, __dirname, '@brightspace-ui/lms-context-provider/client.js', {}, (err, filepath) => {
  if (err) console.error(err);
  else console.log(filepath);
});

Expected

C:\test\webpack-resolver-issue\node_modules\@brightspace-ui\lms-context-provider\src\client\client.js

Actual

details: "resolve '@brightspace-ui/lms-context-provider/client.js' in 'C:\\test\\webpack-resolver-issue'\n" +
    '  Parsed request is a module\n' +
    '  using description file: C:\\test\\webpack-resolver-issue\\package.json (relative path: .)\n' +
    "    aliased with mapping '@brightspace-ui': 'C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui' to 'C:\\test\\webpack-resolver-issue\\node_mo
dules\\@brightspace-ui/lms-context-provider/client.js'\n" +
    '      using description file: C:\\test\\webpack-resolver-issue\\package.json (relative path: .)\n' +
    '        using description file: C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\package.json (relative path: ./clien
t.js)\n' +
    '          no extension\n' +
    "            C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\client.js doesn't exist\n" +
    '          .js\n' +
    "            C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\client.js.js doesn't exist\n" +
    '          .json\n' +
    "            C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\client.js.json doesn't exist\n" +
    '          .node\n' +
    "            C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\client.js.node doesn't exist\n" +
    '          as directory\n' +
    "            C:\\test\\webpack-resolver-issue\\node_modules\\@brightspace-ui\\lms-context-provider\\client.js doesn't exist"

Notes

If we use the browser field instead of the exports, we get the expected result.

alexander-akait commented 3 weeks ago

Intresting...

vankop commented 3 weeks ago

I guess thats the reason https://github.com/webpack/enhanced-resolve/blob/main/lib/ResolverFactory.js#L354

alexander-akait commented 3 weeks ago

@vankop I think we should fix it