modernweb-dev / web

Guides, tools and libraries for modern web development.
https://modern-web.dev
MIT License
2.23k stars 297 forks source link

The module @web/dev-server-esbuild does not seem to observe the `paths` definition in tsconfig.json #2837

Open doberkofler opened 1 month ago

doberkofler commented 1 month ago

I'm currently testing the Moden web test Runner and trying to use @web/dev-server-esbuild to build my tests written in TypeScript. Unfortunately it seems as if the import alias defined in @web/dev-server-esbuild are not properly processed.

{
    "compilerOptions": {
        "target": "ESNext",
        "module": "ESNext",
        "moduleResolution": "node",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "allowSyntheticDefaultImports": true,
        "types": ["@playwright/test", "mocha", "chai"],
        "paths": {
            "@alias_root/*": ["./*"]
        }
    },
    "include": ["**/*.ts"]
}

A quick look into the source code of @web/dev-server-esbuild suggests that the function resolveImport in EsbuildPlugin.ts skips to entirely process all files that does not start with . to only handle relative imports, but does this before having resolved the alias and therefore missing the import using an alias.

    if (!source.endsWith('.js') || !source.startsWith('.')) {
      // only handle relative imports
      return;
    }