#aws-lambda #yaml #serverless
Вопрос:
Здравствуйте, я пытаюсь настроить новый бессерверный проект graphql, но serverless.yml
файл не находит моего обработчика, который находится в src/graphql.ts
Это приводит к такой ошибке:
Failure: Cannot find module '/Users/VIU/Projects/am/src/graphql'
Он src
находится в корневом каталоге, и путь указан правильно, поэтому я не понимаю, что происходит.
serverless.yml
Выглядит это примерно так:
graphql:
handler: src/graphql.graphqlHandler
events:
- http:
path: graphql
method: post
cors: true
- http:
path: graphql
method: get
cors: true
И файл обработчика graphql выглядит следующим образом:
import { ApolloServer, gql } from "apollo-server-lambda"
// Construct a schema, using GraphQL schema language
const typeDefs = gql`
type Query {
hello: String
}
`;
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
const server = new ApolloServer({ typeDefs, resolvers });
exports.graphqlHandler = server.createHandler();
Я тоже пытался
module.exports.graphqlHandler = server.createHandler();
export const graphqlHandler = server.createHandler();
Но и это, похоже, тоже не работает.
Есть ли у кого-нибудь представление о том, что я делаю не так? Спасибо!
Ответ №1:
Для запуска функции AWS Lambda с Node.js во время выполнения вам нужно будет предоставить .js
файл в качестве его обработчика. В частности, при использовании TypeScript и бессерверной платформы это означает, что handler
поле должно ссылаться на имя скомпилированного файла, а именно заканчиваться .js
расширением.
Один из вариантов решения этой проблемы-просто изменить handler
поле, чтобы оно указывало на скомпилированную версию вашего файла. Например, учитывая следующую структуру:
├── am
│ ├── built
│ │ └── graphql.js
│ ├── package-lock.json
│ ├── package.json
│ └── src
│ └── graphql.ts
└── serverless.yaml
Правильное handler
поле-это:
graphql:
handler: built/graphql.graphqlHandler
Тем не менее, другой вариант, который я считаю предпочтительным (и, возможно, то, к чему вы изначально стремились), заключается в использовании плагина без сервера-плагина-typescript для бессерверной платформы. Это должно сократить ваши усилия и позволить вам почти беспрепятственно использовать TypeScript. На самом деле есть пример, предоставленный компанией Serverless, который очень похож на ваши потребности, и я думаю, что вы можете найти его полезным.
Комментарии:
1. Супер! это то, что я искал, спасибо!