Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to detect exports from bundled webpack output #88

Open
SimenB opened this issue Oct 9, 2023 · 6 comments
Open

Unable to detect exports from bundled webpack output #88

SimenB opened this issue Oct 9, 2023 · 6 comments
Labels
edge case wontfix This will not be worked on

Comments

@SimenB
Copy link
Member

SimenB commented Oct 9, 2023

Title is probably inaccurate 😅

I recently added bundling to Jest, and it seems the output makes the lexer not detect exports correctly.

Specifically, it picks up the exports. stuff that is not exported, but not the exports within Object.definedProperty which actually are.

Quickest reproduction I have is to clone Jest, run yarn && yarn build:js then this:

const fs = require('fs');
const {parse} = require('cjs-module-lexer');

const source = fs.readFileSync(require.resolve('jest-watcher'), 'utf8');

console.log(parse(source));

This prints

{
  exports: [
    'default',
    'KEYS',
    'printPatternCaret',
    'printRestoredPatternCaret'
  ],
  reexports: []
}

Running the parser on the published version (29.7.0) gives this:

{
  exports: [
    '__esModule',
    'BaseWatchPlugin',
    'JestHook',
    'PatternPrompt',
    'Prompt',
    'TestWatcher'
  ],
  reexports: [ './constants', './lib/patternModeHelpers' ]
}

The reexports are of course gone as it's bundled, but we're also seeing that the lexer has detected only the resolved re-exports?

@liuxingbaoyu
Copy link

https://github.com/nodejs/cjs-module-lexer#project-status This project has been frozen, I suspect webpack may have relevant options that will follow this.

@SimenB
Copy link
Member Author

SimenB commented Oct 9, 2023

Yeah, I noticed that.

Would be cool if we can configure webpack to output compatible code, yeah. Might have to create a manual re-export facade thing if not.

Or just accept interop is not the best and have people use default export.

@liuxingbaoyu
Copy link

webpack/webpack#13098
rollup/rollup#4826

Unfortunately webpack doesn't support this, although rollup does.

@SimenB
Copy link
Member Author

SimenB commented Oct 9, 2023

Happy to switch to rollup (vite probably?) instead - I'm not particularly married to using webpack (it's just the one I got working (and the one I have by far the most experience with))

@SimenB
Copy link
Member Author

SimenB commented Oct 30, 2023

FWIW, I think I'll just be checking the exports manually at build time and include an mjs file, which should skip the lexer entirely: jestjs/jest#14661

@liuxingbaoyu
Copy link

Amazing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
edge case wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests

3 participants