Привет, ребята ~ Я не могу развернуть, когда назначаю аргументы 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 , а пока: Может ли кто-нибудь мне помочь? Спасибо ~ 🤣
Насколько я понимаю, 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 работал у меня.
Создайте новый файл /src/fixTsPaths.ts
:
import * as ModuleAlias from 'module-alias'
ModuleAlias.addAliases({
helpers: __dirname + '/helpers',
})
Импортируйте его в /scr/index.ts
.
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import './fixTsPaths'
Самый полезный комментарий
Всем привет! Хочу добавить дополнительную информацию об этой проблеме, потому что я тоже с ней сталкивался.
В другом моем проекте 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, включая как локальные, так и производственные среды?