Как установить пользовательский путь node_modules с машинописью - PullRequest
0 голосов
/ 16 апреля 2020

Я начинаю разработку AWS лямбда-функции в TypeScript. Я хочу, чтобы каталог node_modules находился в подкаталоге, чтобы иметь возможность управлять всеми зависимостями в слое. Итак, у меня есть следующая структура:

- dependencies/            <- This will be my layer
  - nodesjs/
    - node_modules/
      ...
  - my_own_dependencies/
    ...
- src
  - blabla.ts

Я использую относительный импорт для my_own_dependencies, и он прекрасно работает.

Но я не могу получить tsc для импорта модулей узлов, независимо от модуля, я всегда получаю error TS2307: Cannot find module 'xxxx'. Использование относительного импорта не очень помогает, потому что, если сам модуль зависит от другого модуля, ошибка все равно будет выдана.

Я пробовал различные комбинации compilerOptions параметров (baseUrl, paths и rootDirs) в tsconfig.json, но ни один из них на самом деле не работает.

Прямо сейчас мой tsconfig. json выглядит так:

{
  "compilerOptions": {
    "target": "es2019",
    "module": "commonjs"
    "strict": true,
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "*": [
        "dependencies/nodejs/node_modules"
      ]
    },
    "forceConsistentCasingInFileNames": true
  }
}

Редактировать: Выполняется tsc --traceResolution blah/blah.ts выводит следующее:

Module resolution kind is not specified, using 'NodeJs'.
Loading module 'xxx' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/path/to/blah/node_modules' does not exist, skipping all lookups in it.
File '/path/to/node_modules/xxx.ts' does not exist.
...
And so on until:
Directory '/node_modules' does not exist, skipping all lookups in it.

Что странно, так это то, что он говорит, что тип разрешения модуля не определен, хотя он четко определен как "узел" в tsconfig.json ...

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 16 апреля 2020

ОК, получилось tsconfig.json игнорируется при указании указанного c исходного файла для компиляции, возможно, я пропустил это в документации ... В конечном итоге все нормально, когда вы используете Webpack или просто запускаете tsc.

В итоге у меня появился tsconfig.json файл:

{
  "compilerOptions": {
    "target": "es2019",
    "module": "commonjs",
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "moduleResolution": "node",
    "baseUrl": "./dependencies/nodejs/node_modules",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "**/*.ts"
  ],
  "exclude": [
    "dependencies/nodejs/node_modules",
    "**/*.spec.ts"
  ]
}
...