ChrisW
ChrisW

Reputation: 56113

How to use paths in tsconfig for a single module?

This question is a follow-on from How to use paths in tsconfig.json? except I want to do it for a single module.

I have a module:

The compiler doesn't find it:

error TS2307: Cannot find module 'foo'

This tsconfig doesn't fix that problem ...

{ "compilerOptions": { "noEmit": true, "strict": true, "module": "commonjs", "target": "es2017", "noImplicitAny": true, "moduleResolution": "node", "sourceMap": true, "outDir": "build", "baseUrl": ".", "paths": { "foo": ["src/functions/*"], "*": [ "node_modules/*" ] } }, "include": [ "./src/**/*", "./typings/**/*", "./test/**/*", "./test-integration/**/*" ] }

... but this does:

"paths": { "*": [ "node_modules/*", "src/functions/*" ] }


Why didn't the first version of paths work --- what was I doing wrong, what can I do to ensure that "src/functions/*" is used only when importing foo (and not when importing *)?

(I'm using tsc version 3.1.6 on Windows with Node.js).

Upvotes: 2

Views: 7016

Answers (1)

Kokogino
Kokogino

Reputation: 1056

You are assigning a word foo to the content of a directory src/functions/*.

But foo like that can only be used to specify the exact location of a single file (module), without a wildcard, so, like this:

"paths": {
    "foo": ["src/functions/foo"],
    "*": [
        "node_modules/*"
    ]
}

What you are probably looking for is

"paths": {
    "foo/*": ["src/functions/*"],
    "*": [
        "node_modules/*"
    ]
}

(foo/* instead of foo)

Upvotes: 4

Related Questions