tsc создает `TS2307: не удается найти модуль` для локального файла.

У меня есть простой пример проекта с использованием 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 codebase не использует относительные пути, но у них все работает нормально, поэтому я должен что-то упустить в своем проекте:https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14

Вы можете проверить мое GitHub репо, но в случае, если это поможет, вотtsconfi,g.json файл, который я использую:

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

Самое смешное, что создание проекта черезwebpack с помощьюts-loader работает нормально, так что я думаю, это просто проблема конфигурации ...

Ответы на вопрос(3)

Кодовая база vscode не использует относительные пути, но у них все работает нормально

Действительно зависит от вашего загрузчика модуля. Если вы используетеsystemjs сbaseurl тогда это будет работать. VSCode использует собственный загрузчик модулей (на основе старой версии requirejs).

Рекомендация

Используйте относительные пути, так как это то, чтоcommonjs поддерживает. Если вы перемещаете файлы, вы получите ошибку времени компиляции (это хорошо), так что вы будете лучше, чем подавляющее большинство чистых js-проектов (на npm).

 Daniel Perez Alvarez01 июн. 2016 г., 14:37
Оказывается настройкаmodule вamd имеет такой эффект ...
 Daniel Perez Alvarez01 июн. 2016 г., 12:50
Загрузкаvscode База кода в самой Visual Studio Code, я не получаю волнистые линии, поэтому Visual Studio Code как-то понимает такие вещи, какimport {notImplemented} from 'vs/base/common/errors';независимо от того, где находится файл, содержащий этот код. Как они это делают?
Решение Вопроса

@vladima ответил наэтот вопрос на GitHub:

То, как компилятор разрешает модули, контролируется параметром moduleResolution, который может бытьnode или жеclassic (больше деталей и различий можно найтиВот). Если этот параметр не указан, компилятор рассматривает этот параметр какnode если модульcommonjs а такжеclassic - иначе. В вашем случае, если вы хотитеclassic стратегия разрешения модулей, которая будет использоваться сcommonjs модули - вам нужно установить это явно с помощью

{
    "compilerOptions": {
        "moduleResolution": "node"
    }
}
 Neekey23 авг. 2019 г., 06:57
это действительно помогает! Спасибо
 SSH This26 июн. 2018 г., 22:59
Я вижу эту ошибку:error TS5023: Unknown compiler option 'moduleResolution'.

В моем случае ,

   //app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
            //{
            //    HotModuleReplacement = true
            //});

я прокомментировал это в startup.cs

Ваш ответ на вопрос