通过无服务器失败进行 Typescript 编译
Typescript compilation through Serverless failing
我有一个基于 Typescript 的 Lambda 函数,它可以用 tsc
很好地编译,但是当我尝试通过无服务器部署时,Typescript 复杂化失败并出现以下错误:
Serverless: Running "serverless" installed locally (in service node_modules)
Serverless: Compiling with Typescript...
Serverless: Using local tsconfig.json
Serverless: Warning: "rootDir" from local tsconfig.json is overriden
Cannot locate handler - account. not found
Error --------------------------------------------------
Error: Typescript compilation failed. Please ensure handlers exists with ext .ts or .js
at /Users/bob/Development/service-account/node_modules/serverless-plugin-typescript/src/typescript.ts:69:13
account.ts
代码的相关块是:
import { APIGatewayProxyHandler, APIGatewayEvent, Context } from 'aws-lambda';
import 'source-map-support/register';
export const handler: APIGatewayProxyHandler = async (event: APIGatewayEvent, context: Context): Promise<any> => {
console.debug(`event: ${JSON.stringify(event, null, 1)}`);
console.debug(`context: ${JSON.stringify(context, null, 1)}`);
...
}
serverless.yml 文件的相关部分是:
plugins:
- serverless-iam-roles-per-function
- serverless-plugin-typescript
- serverless-webpack
service: accounts
custom:
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
functions:
account:
handler: account.handler
...
tsconfig.json比较标准:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs",
"lib": [
"es2020",
"dom"
],
"strict": true,
"esModuleInterop": true,
"rootDir": "./src",
"outDir": "./dist",
},
"include": [
"./src/*.ts"
],
"exclude": [
"node_modules"
]
}
目录树如下所示:
config <dir>
dist <dir>
node_modules <dir>
src <dir>
account.ts
swagger <dir>
package.json
tsconfig.json
webpack.config.js
serverless.yml
关于连接所有点以使其在无服务器中工作时我缺少什么的想法?
您需要提供处理程序的相对路径,这应该可行
functions:
account:
handler: "./src/account.handler"
您可以选择省略 ./
,handler: "src/account.handler"
应该也可以。
修改文件tsconfig.json
更改
"include": [
"./src/*.ts"
]
到
"include": [
"./src/**/*.ts"
]
我有一个基于 Typescript 的 Lambda 函数,它可以用 tsc
很好地编译,但是当我尝试通过无服务器部署时,Typescript 复杂化失败并出现以下错误:
Serverless: Running "serverless" installed locally (in service node_modules)
Serverless: Compiling with Typescript...
Serverless: Using local tsconfig.json
Serverless: Warning: "rootDir" from local tsconfig.json is overriden
Cannot locate handler - account. not found
Error --------------------------------------------------
Error: Typescript compilation failed. Please ensure handlers exists with ext .ts or .js
at /Users/bob/Development/service-account/node_modules/serverless-plugin-typescript/src/typescript.ts:69:13
account.ts
代码的相关块是:
import { APIGatewayProxyHandler, APIGatewayEvent, Context } from 'aws-lambda';
import 'source-map-support/register';
export const handler: APIGatewayProxyHandler = async (event: APIGatewayEvent, context: Context): Promise<any> => {
console.debug(`event: ${JSON.stringify(event, null, 1)}`);
console.debug(`context: ${JSON.stringify(context, null, 1)}`);
...
}
serverless.yml 文件的相关部分是:
plugins:
- serverless-iam-roles-per-function
- serverless-plugin-typescript
- serverless-webpack
service: accounts
custom:
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
functions:
account:
handler: account.handler
...
tsconfig.json比较标准:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs",
"lib": [
"es2020",
"dom"
],
"strict": true,
"esModuleInterop": true,
"rootDir": "./src",
"outDir": "./dist",
},
"include": [
"./src/*.ts"
],
"exclude": [
"node_modules"
]
}
目录树如下所示:
config <dir>
dist <dir>
node_modules <dir>
src <dir>
account.ts
swagger <dir>
package.json
tsconfig.json
webpack.config.js
serverless.yml
关于连接所有点以使其在无服务器中工作时我缺少什么的想法?
您需要提供处理程序的相对路径,这应该可行
functions:
account:
handler: "./src/account.handler"
您可以选择省略 ./
,handler: "src/account.handler"
应该也可以。
修改文件tsconfig.json
更改
"include": [
"./src/*.ts"
]
到
"include": [
"./src/**/*.ts"
]