Как настроить машинопись для работы с сетевым модулем resol.modules - PullRequest
0 голосов
/ 01 апреля 2019

Скажите, у меня есть конфигурация веб-пакета, подобная этой:

resolve: {
  extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
  modules: ['my_modules', 'node_modules'],
},

Итак, у меня есть специальное имя каталога my_modules, которое работает так же, как каталоги node_modules. Все остальные примеры и вопросы, которые я нашел о том, как заставить машинопись работать с конфигурацией resolve.modules веб-пакета, относятся к абсолютным путям, ни один не относится к имени каталога, как в моем случае.

Так есть ли способ заставить машинопись понимать разрешение модуля в конфигурации resolve.modules веб-пакета выше? (имея другое имя каталога, которое работает аналогично node_modules)

1 Ответ

0 голосов
/ 01 апреля 2019

Похоже, комбинация baseUrl & paths в tsconfig.json может помочь вам, взгляните на (очень информативную) документацию здесь .

Они предоставляютпример, который очень похож на ваш случай:

Использование «путей» также позволяет создавать более сложные сопоставления, включая несколько резервных местоположений .Рассмотрим конфигурацию проекта, в которой только некоторые модули доступны в одном месте, а остальные - в другом.Шаг сборки собрал бы их всех в одном месте.Макет проекта может выглядеть следующим образом:

projectRoot
├── folder1
│   ├── file1.ts (imports 'folder1/file2' and 'folder2/file3')
│   └── file2.ts
├── generated
│   ├── folder1
│   └── folder2
│       └── file3.ts
└── tsconfig.json

Соответствующий файл tsconfig.json будет выглядеть так:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "generated/*"
      ]
    }
  }
}

Это говорит компилятору о любом импорте модуля, который соответствует шаблону "* "(т. е. все значения) для просмотра в двух местах: baseUrl и generated/

import ‘folder2/file3’

    - pattern ‘*’ is matched and wildcard captures the whole module name
    - try first substitution in the list: ‘*’ -> folder2/file3
    - result of substitution is non-relative name - combine it with baseUrl -> projectRoot/folder2/file3.ts.
    - File does not exist, move to the second substitution
    - second substitution ‘generated/*’ -> generated/folder2/file3
    - result of substitution is non-relative name - combine it with baseUrl -> projectRoot/generated/folder2/file3.ts.
    - File exists. Done

В этом случае вместо generated/* вы можете использовать my_modules вместо:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "my_modules/*"
        "*",
      ]
    }
  }
}

...