1. ホーム
  2. typescript

[解決済み] tsc が `TS2307: Cannot find module` for a local file をスローします。

2022-08-29 18:47:30

質問

TypeScriptを使った簡単なサンプルプロジェクトがあります。 https://github.com/unindented/ts-webpack-example

実行中 tsc -p . (を実行します(ただし tsc バージョン 1.8.10) は以下を投げます。

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'.

以下のように、ローカルファイルのインポートすべてに対して文句を言います。

import Counter from 'components/counter';

相対パスに変更すればうまくいくのですが、ファイルを移動するときに生活が苦しくなるので、変更したくありません。

import Counter from '../components/counter';

vscode コードベースは相対パスを使用しませんが、相対パスではすべてうまく動作します。 https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14

私の GitHub リポジトリを確認することができますが、役に立つかもしれないので、以下は tsconfig.json ファイルです。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "noImplicitAny": false,
    "removeComments": false,
    "preserveConstEnums": true,
    "sourceMap": true,
    "outDir": "dist"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}

面白いことに、プロジェクトを webpack を使って ts-loader は正常に動作しているので、設定の問題だと思いますが...。

どのように解決するのですか?

vladima は次のように答えました。 この問題は GitHub にあります。 :

<ブロッククオート

コンパイラがモジュールを解決する方法は moduleResolution オプションで制御されます。 node または classic (さらに の詳細と相違点は はこちら ). この設定が省略された場合 として扱われます。 node である場合、モジュールは commonjs であり classic - というように、それぞれを指定します。あなたの場合、もし classic モジュール の解決策を commonjs モジュールで使用されます。 で明示的に設定する必要があります。

{
    "compilerOptions": {
        "moduleResolution": "node"
    }
}