9

我在构建 Lambda 函数时尝试使用 TypeScript,但在使用也是用 TypeScript 编写的 Lambda 层时遇到了问题。

TypeScript 无法识别我的层的 /opt/nodejs/... 导入(因为它将在 SAM 或 AWS 中运行),因此我无法将我在层中定义的类型导入到我的 Lambda 函数。

我试图查看是否能够以某种方式 npm 链接该层,但我似乎无法使其正常工作,因为导入是本地路径 '/opt/nodejs ...' 而不仅仅是模块名称。

层:

export interface SomeType {
  someField: string
}

拉姆达:

import { SomeType } from '/opt/nodejs/myLayer' // this does not work

我只是收到错误消息:Cannot find module '/opt/nodejs/myLayer'.ts(2307)我发现自己不得不用它来抑制它,// @ts-ignore can be ignored as this is a Lambda layer但这意味着我无法使用图层中的 TypeScript 类型。

4

1 回答 1

12

我想我可能已经解决了这个问题,我在 tsconfig.json 中添加了 /opt/nodejs... 路径作为路径映射:

{
    "paths": {
      "/opt/nodejs/myLayer": ["../../layers/myLayer/src/some-layer-module"]
    }
}

我现在可以从 Layer 导入 TypeScript 类型,并且由于导入路径没有改变,它仍然可以在 AWS/SAM 中工作

于 2019-08-19T09:22:42.073 回答