嘿,伙计们〜当我在tsconfig.json
分配paths
参数时,我无法部署,像这样:
{
"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 Cloud Functions一起使用,现在,任何人都可以帮助我吗? 谢谢〜🤣
按照我的理解, baseUrl
和paths
仅由编译器和linter使用,以了解模块的类型和位置。 这两个属性确实不会告诉编译器将那些映射路径包含到编译中,或更改import
语句以在编译期间工作。 查看已编译的lib
目录,以查看@custom-modules/*
import
语句未更改。
也就是说,该错误来自以下事实:在部署过程中,CLI解释功能代码以了解需要部署哪些功能。 由于功能代码需要一个它不了解的模块(请记住,该模块位于lib
文件夹中),因此会抛出一个错误,打印出该消息。
如果您尝试通过执行import ... from "@custom-modules/...";
并重新映射到结构中的其他位置来保存某些类型,则可以通过进行相对导入来解决此问题,无论如何这可能是推荐的方法。 我不认为baseUrl
和paths
是您要寻找的答案。
嗨,您好! 想要添加有关此问题的更多信息,因为我也遇到过。
在我的另一个Node.js + TypeScript项目中,此问题就位,因为如上所述,Typescript不会更改输出JS中的require路径。 我唯一能找到的有效解决方案是https://github.com/dividab/tsconfig-paths#with -node,它根据tsconfig.json
配置文件更改了Node.js路径处理方式。 这要归功于-r tsconfig-paths/register
参数传递给Node,并且在运行时执行register
(即使在index.ts的最顶端)在Firebase Functions中似乎不起作用。
相对路径对我来说很不方便,因为我有一个common
文件夹,前端代码也使用该文件夹,它的相对路径在index.ts中看起来像../../../common
,甚至更难看在子文件夹中。
因此,也许有一种方法可以为Firebase Functions(包括本地和生产环境)添加此-r tsconfig-paths/register
参数?
我发现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中的require路径。 我唯一能找到的有效解决方案是https://github.com/dividab/tsconfig-paths#with -node,它根据
tsconfig.json
配置文件更改了Node.js路径处理方式。 这要归功于-r tsconfig-paths/register
参数传递给Node,并且在运行时执行register
(即使在index.ts的最顶端)在Firebase Functions中似乎不起作用。相对路径对我来说很不方便,因为我有一个
common
文件夹,前端代码也使用该文件夹,它的相对路径在index.ts中看起来像../../../common
,甚至更难看在子文件夹中。因此,也许有一种方法可以为Firebase Functions(包括本地和生产环境)添加此
-r tsconfig-paths/register
参数?