我有这个本地打字稿文件,当部署时,最终在我的服务器的/opt
目录中。因此,如果文件位于本地layers/websocketapi/DataSender.ts
,则将其部署到opt/DataSender.js
。但是,当我在本地开发该项目时,它不在我的Opt Directory中,所以打字稿抱怨它找不到此模块。但是,如果我将其更改为引用本地版本,则我的部署中断,因为它不再引用/opt
目录实际位于服务器上的位置。
如果我使用 // @ts-ignore
注释,则错误会消失,但是我没有得到类型支持,并且假设是any
的类型。
这是我的代码:
import { APIGatewayEvent } from 'aws-lambda';
// @ts-ignore
import DataSender from '/opt/DataSender';
export async function handler(event: APIGatewayEvent) {
const dataSender = new DataSender();
await dataSender.sendData(event.requestContext.connectionId!, { message: 'hi!' })
return {
statusCode: 200,
body: 'Game created'
}
}
如何告诉Typescript编译器我要从OPT目录导入的此文件实际上位于layers/websocketapi/DataSender.js
,但不要更改导入语句?
您可以将paths
映射添加到tsconfig.json
文件中以将导入路径/opt/*
映射到真实的路径layers/websocketapi/*
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"/opt/*": ["layers/websocketapi/*"]
}
}
...
}
路径相对于baseUrl
解决,有关路径映射的更多信息可以在typescript文档上找到https://www.typescriptlang.org/docs/docs/handbook/mmodule-resolution.html.html#path-path-path-path-path-pather