1

I am pretty sure it is all about the version of WebPack I use ("webpack-cli": "3.3.11") but I want to be sure I am right before going on another journey of debugging for upgrading WebPack (I tried to upgrade it to 5 but it does not work without a config file, I am just stretching the limit against the read-the-manual instruction).

In the tsconfig.base.js I have this:

"baseUrl": ".",
"paths": {
  "@/*": ["src/*"]
}

(The reason for using a separate tsconfig.base.json is in the question I linked to below.)

Then there is this:

import { RegistrationStepManager } from "@/helpers";

in file ./src/some/path/RegistrationStepper.tsx.

Running npm start with CRA and react-scripts v4.0.3 shows an error without crashing:

Failed to compile.

./src/some/path/RegistrationStepper.tsx
Module not found: Can't resolve '@/helpers' in '/my-path/my-project/src/some/other/path'.

VS Code tooltips and autocompletion show everything is imported well, no red squiggles, just some ignoreable warnings.

I think that the alias for "@/*" is not working well but, because VS Code works well with it, I think it might be a bug.

How does TS work with WebPack when it comes to this failure? Do I have to upgrade to WebPack 5?

Another question from the same day, from me, on the same code, maybe it is relevant here too: How can I import an enum through an intermediate TS file?.

Thanks.

Update 1

I read this and I am going to migrate from CRA to WebPack without CRA since the project I am working on is not just for playing. Please, if you can, suggest me a guide to migrate from CRA to WebPack. I think the issue at the start of this question is about some missing WebPack configuration. I already have an old WebPack config file that might be causing a part of the issue.

silviubogan
  • 3,343
  • 3
  • 31
  • 57
  • 2
    You are on the right track. Currently CRA does not support typescript aliases, so you either have to augment it with something like react-app-rewired or craco. I would recommend migrating away from CRA if you can. There are tons of tutorials out there on how to build a react project with typescript and webpack without CRA – Seth Lutske Jun 12 '21 at 16:13
  • @SethLutske Thank you for the confirmation and for reassuring me. – silviubogan Jun 13 '21 at 00:02

1 Answers1

2

I was having a WebPack config file that was not actually used. I was actually using CRA. So I started using react-app-rewired and WebPack v4 as an intermediate solution till I start using "pure" WebPack. In config-overrides.js I put:

const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin");

module.exports = {
  webpack: function(config, env) {
    return {
      ...config,
      resolve: {
        ...config.resolve,
        plugins: [
          ...config.resolve.plugins,
          new TsconfigPathsPlugin({
            extensions: [".js", ".jsx", ".ts", ".tsx"],
          }),
        ],
      },
    };
  },
};

After migrating to react-app-rewired and making this change, the Failed to compile. error is gone. This also solves the issue in How can I import an enum through an intermediate TS file?.

silviubogan
  • 3,343
  • 3
  • 31
  • 57