Skip to content

webpack5 resolve file error in monorepo  #76

@await-ovo

Description

@await-ovo

Bug report

What is the current behavior?
I use webpack 5 with this plugin in a simple yarn workspaces monorepo, Which contain a simple add and a common util library. But there is an error reported:
image

If the current behavior is a bug, please provide the steps to reproduce.
This is a repo to reproduce: test-monorepo.

  1. git clone https://github.com/diem98/test-monorepo.git
  2. cd test-monorepo && yarn
  3. cd apps/web-app
  4. yarn dev

After that, you can see the error in the figure above.
apps/web-app/src/App.tsx content as below:

import React, {useState} from 'react';
import {addOne} from 'common-tools';
import { add } from './utils';

console.log(`add(1,2) : ${add(1,2)}`)

const App = () => {
  const [num, setNum] = useState(0);
  
  const handleClick = () => {
    setNum(prev => addOne(prev));
  }

  return (
    <div>
      <h1>current number: {num}</h1>
      <button type="button" onClick={handleClick}>addOne</button>
    </div>
  )
}

export default App;

You can see that import addOne from common-tools package and import add function from it's own utils directory.

packages/common-tools export detail as below:
image

But inside the dist, it is like this:
image
image

You will find that import ./utils in common-tools/src/add.ts compiled to ./src/utils/index.js, This leads to the error described above.

What is the expected behavior?

It should compile successfully as it did in webpack 4.

branch webpack-4 will compile successfully with the same code.

I tried to dive into the plugin source code, The getInnerRequest return value was found to be different
image

In webpack 4 ./utils just returns as expected: ./src/utils. But In webpack 5, ./utils returns src/utils.
So in webpack 5 it will execute the following matchPath function. then ./utils request in common-tools/src/add.ts resolved to apps/web-app/src/utils/index.js.

I found that the different results are related to the different versions of the enhanced-resolve implementation. But I don't know if it was done intentionally.

image

https://codesandbox.io/s/focused-rain-4hoyq?file=/src/index.js

Thank you very much for your help, and please forgive my broken English.

Other relevant information:
webpack version: 5.32
Node.js version: 14.15.4
Operating System: macos

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions