Firebase-tools: 使用TypeScript部署时找不到模块'@ custom-modules / moduleName'

创建于 2018-11-01  ·  3评论  ·  资料来源: firebase/firebase-tools

嘿,伙计们〜当我在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一起使用,现在,任何人都可以帮助我吗? 谢谢〜🤣

question

最有用的评论

嗨,您好! 想要添加有关此问题的更多信息,因为我也遇到过。
在我的另一个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参数?

所有3条评论

按照我的理解, baseUrlpaths仅由编译器和linter使用,以了解模块的类型和位置。 这两个属性确实不会告诉编译器将那些映射路径包含到编译中,或更改import语句以在编译期间工作。 查看已编译的lib目录,以查看@custom-modules/* import语句未更改。

也就是说,该错误来自以下事实:在部署过程中,CLI解释功能代码以了解需要部署哪些功能。 由于功能代码需要一个它不了解的模块(请记住,该模块位于lib文件夹中),因此会抛出一个错误,打印出该消息。

如果您尝试通过执行import ... from "@custom-modules/...";并重新映射到结构中的其他位置来保存某些类型,则可以通过进行相对导入来解决此问题,无论如何这可能是推荐的方法。 我不认为baseUrlpaths是您要寻找的答案。

嗨,您好! 想要添加有关此问题的更多信息,因为我也遇到过。
在我的另一个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对我有用。

  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 等级