Firebase-tools: Не удается найти модуль @ custom-modules / moduleName при развертывании с использованием TypeScript

Созданный на 1 нояб. 2018  ·  3Комментарии  ·  Источник: firebase/firebase-tools

Привет, ребята ~ Я не могу развернуть, когда назначаю аргументы paths в tsconfig.json , например:

{
  "compilerOptions": {
    "lib": ["es6"],
    "module": "commonjs",
    "outDir": "lib",
    "rootDir": "src",
    "target": "es6",
    "sourceMap": true,
    "noImplicitReturns": true,
    "baseUrl": ".",
    // here, I assign a paths arguments
    "paths": {
      "@custom-modules/*": ["src/modules/*"],
    }
  },
  "compileOnSave": true,
  "include": ["src"]
}

Аргументы paths обычно используют TypeScript, и он отлично работает. Но развертывание firebase вызывает эту ошибку:

Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'

Этот вопрос публиковался в StackOverFlow до того, как использовать сопоставление путей TS с облачными функциями Firebase , а пока: Может ли кто-нибудь мне помочь? Спасибо ~ 🤣

question

Самый полезный комментарий

Всем привет! Хочу добавить дополнительную информацию об этой проблеме, потому что я тоже с ней сталкивался.
В другом моем проекте Node.js + TypeScript проблема была, потому что, как объяснялось выше, для TypeScript не требуются пути в выходном JS. Единственное рабочее решение, которое мне удалось найти, - это https://github.com/dividab/tsconfig-paths#with -node, который изменяет способ обработки путей Node.js на основе файла конфигурации tsconfig.json . Это работает благодаря аргументу -r tsconfig-paths/register переданному в Node, и выполнение register во время выполнения (даже в самом начале index.ts) не похоже на работу в функциях Firebase.

Относительные пути кажутся мне очень неудобными, потому что у меня есть какая-то папка common которая также используется кодом внешнего интерфейса, относительный путь к ней будет выглядеть как ../../../common в index.ts, и даже более уродливо во вложенных папках.

Так, может быть, есть способ добавить этот аргумент -r tsconfig-paths/register для функций Firebase, включая как локальные, так и производственные среды?

Все 3 Комментарий

Насколько я понимаю, baseUrl и paths используются только компилятором и линтером для понимания типизации и расположения модулей. Эти два свойства _не_ сообщают компилятору _включить_ эти сопоставленные пути в компиляцию или изменять операторы import для работы во время компиляции. Взгляните на скомпилированный каталог lib чтобы убедиться, что оператор @custom-modules/* import не изменился.

Тем не менее, ошибка возникает из-за того, что в процессе развертывания интерфейс командной строки интерпретирует код функций, чтобы понять, какие функции необходимо развернуть. Поскольку для кода функции требуется модуль, о котором он не знает (помните, он находится в папке lib ), возникает ошибка, которая выводит это сообщение.

Если вы пытаетесь сэкономить на вводе, выполнив import ... from "@custom-modules/..."; и переназначив его в другое место в вашей структуре, вы можете исправить это, выполнив относительный импорт, что, вероятно, в любом случае рекомендуется. Я не верю, что baseUrl и paths - это тот ответ, который вы ищете.

Всем привет! Хочу добавить дополнительную информацию об этой проблеме, потому что я тоже с ней сталкивался.
В другом моем проекте Node.js + TypeScript проблема была, потому что, как объяснялось выше, для TypeScript не требуются пути в выходном JS. Единственное рабочее решение, которое мне удалось найти, - это https://github.com/dividab/tsconfig-paths#with -node, который изменяет способ обработки путей Node.js на основе файла конфигурации tsconfig.json . Это работает благодаря аргументу -r tsconfig-paths/register переданному в Node, и выполнение register во время выполнения (даже в самом начале index.ts) не похоже на работу в функциях Firebase.

Относительные пути кажутся мне очень неудобными, потому что у меня есть какая-то папка common которая также используется кодом внешнего интерфейса, относительный путь к ней будет выглядеть как ../../../common в index.ts, и даже более уродливо во вложенных папках.

Так, может быть, есть способ добавить этот аргумент -r tsconfig-paths/register для функций Firebase, включая как локальные, так и производственные среды?

Я обнаружил, что https://www.npmjs.com/package/module-alias работал у меня.

  1. Создайте новый файл /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. Импортируйте его в /scr/index.ts .

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
Была ли эта страница полезной?
0 / 5 - 0 рейтинги