debugtypescriptCritical
tsc throws `TS2307: Cannot find module` for a local file
Viewed 0 times
ts2307modulefindforthrowsfilecannottsclocal
Problem
I've got a simple example project using TypeScript: https://github.com/unindented/ts-webpack-example
Running
It complains about all imports of local files, like the following:
If I change it to a relative path it works, but I don't want to, as it makes my life more difficult when moving files around:
The
You can check out my GitHub repo, but in case it helps here's the
Funny thing is, building the project through
Running
tsc -p . (with tsc version 1.8.10) throws the following:app/index.ts(1,21): error TS2307: Cannot find module 'components/counter'.
components/button/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'.
components/button/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'.
components/counter/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'.
components/counter/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'.
components/counter/index.ts(4,27): error TS2307: Cannot find module 'shared/backbone_with_subviews'.
components/counter/index.ts(5,20): error TS2307: Cannot find module 'components/button'.It complains about all imports of local files, like the following:
import Counter from 'components/counter';If I change it to a relative path it works, but I don't want to, as it makes my life more difficult when moving files around:
import Counter from '../components/counter';The
vscode codebase does not use relative paths, but everything works fine for them, so I must be missing something in my project: https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14You can check out my GitHub repo, but in case it helps here's the
tsconfig.json file I'm using:{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "dist"
},
"exclude": [
"dist",
"node_modules"
]
}Funny thing is, building the project through
webpack using ts-loader works fine, so I'm guessing it's just a configuration issue...Solution
@vladima replied to this issue on GitHub:
The way the compiler resolves modules is controlled by
moduleResolution option that can be either
details and differences can be found here). If this setting is omitted
the compiler treats this setting to be
resolution strategy to be used with
it explicitly by using
The way the compiler resolves modules is controlled by
moduleResolution option that can be either
node or classic (moredetails and differences can be found here). If this setting is omitted
the compiler treats this setting to be
node if module is commonjs andclassic - otherwise. In your case if you want classic moduleresolution strategy to be used with
commonjs modules - you need to setit explicitly by using
{
"compilerOptions": {
"moduleResolution": "node"
}
}Code Snippets
{
"compilerOptions": {
"moduleResolution": "node"
}
}Context
Stack Overflow Q#37548734, score: 181
Revisions (0)
No revisions yet.