Summary
I’m trying to set up this repository locally following the instructions in the "Run Services Locally" section of the README, but I’m running into some issues.
Running the serverless invoke command gives unable to locate handler and module not found errors. I have managed to work around it and managed to run the project locally(steps included below), but I'm not sure if my approach is good.
Can you please review the errors and tell me if I'm doing something wrong? I’m not very familiar with the codebase yet, so I’d greatly appreciate any guidance on setting it up properly.
Steps to reproduce the error
-
Cloned the repository.
-
Created databases 'carbondbdev' and 'carbondbdevEvents'
- Created
backend/services/.env.local with the following:
DB_HOST=localhost
DB_PORT=5432
DB_USER=root
DB_PASSWORD=root
DB_NAME=carbondbdev
- Moved to
backend/services and ran yarn run sls:install
5. Ran the serverless invoke command
serverless invoke local --stage=local --function setup --data '{"rootEmail": "root@root.com","systemCountryCode": "NP", "name": "NepalGov", "logoBase64": "data:image/png;base64,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"}'
Expected Behaviour:
Database tables and root user get created.
Actual Behaviour:
Got the following error:
Compiling with Typescript...
Using local tsconfig.json - tsconfig.json
Cannot locate handler - src/setup/handler. not found
Environment: linux, node 18.20.8, framework 3.30.0 (local), plugin 6.2.3, SDK 4.3.2
Docs: docs.serverless.com
Support: forum.serverless.com
Bugs: github.com/serverless/serverless/issues
Error:
Error: Typescript compilation failed. Please ensure handlers exists with ext .ts or .js
Possible Reason: The handler exists in backend/services/libs/shared/src/setup/handler.ts but the setup handler in serverless.yml points to src/setup/handler.handler
Changes I made to make the project run locally:
Backend
Manually built the backend with yarn build using tsc and tsc-alias to handle path aliases, then run the precompiled JavaScript from dist instead of relying on Serverless to compile TypeScript.
Steps given below:
-
In backend/services, ran yarn add -D tsc-alias to add tsc-alias to handle path aliases.
-
Changed the build script in backend/services/package.json
Before: "build": "nest build"
Changed it to: "build": "tsc --project tsconfig.json && tsc-alias"
- Changed the path in
backend/services/libs/core/src/app-config/app-config.module.ts
Before: path: path.join(__dirname, "/shared/src/i18n/")
Changed it to: path: path.join(__dirname, "../../../../libs/shared/src/i18n")
- Created a
shared folder in backend/services/libs/shared/src with the following code:
exports.handler = async (event) => {
console.log(`Started with: ${event.body}`)
}
-
Ran yarn build. This creates a dist folder in backend/services
-
Change all handler paths in serverless.yml to point to dist
-
In serverless.yml, commented out the serverless-plugin-typescript:
plugins:
# - "serverless-plugin-typescript"
-
Copied the i18n folder from backend/services/libs/shared/src/i18n to backend/services/dist/libs/shared/src
-
Now, running the serverless invoke command (this one) successfully added tables to both databases and created a root user in the system.
-
Started the backend with sls offline --stage=local
Frontend
-
Moved to /web and ran yarn install
-
Changed VITE_APP_BACKEND in web/.env to:
VITE_APP_BACKEND = http://localhost:3000/local
-
yarn dev to run the frontend on http://localhost:3030/
Summary
I’m trying to set up this repository locally following the instructions in the "Run Services Locally" section of the README, but I’m running into some issues.
Running the
serverless invokecommand gives unable to locate handler and module not found errors. I have managed to work around it and managed to run the project locally(steps included below), but I'm not sure if my approach is good.Can you please review the errors and tell me if I'm doing something wrong? I’m not very familiar with the codebase yet, so I’d greatly appreciate any guidance on setting it up properly.
Steps to reproduce the error
Cloned the repository.
Created databases 'carbondbdev' and 'carbondbdevEvents'
backend/services/.env.localwith the following:backend/servicesand ranyarn run sls:install5. Ran the serverless invoke command
serverless invoke local --stage=local --function setup --data '{"rootEmail": "root@root.com","systemCountryCode": "NP", "name": "NepalGov", "logoBase64": "data:image/png;base64,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"}'Expected Behaviour:
Database tables and root user get created.
Actual Behaviour:
Got the following error:
Possible Reason: The handler exists in
backend/services/libs/shared/src/setup/handler.tsbut the setup handler inserverless.ymlpoints tosrc/setup/handler.handlerChanges I made to make the project run locally:
Backend
Manually built the backend with yarn build using tsc and tsc-alias to handle path aliases, then run the precompiled JavaScript from dist instead of relying on Serverless to compile TypeScript.
Steps given below:
In
backend/services, ranyarn add -D tsc-aliasto add tsc-alias to handle path aliases.Changed the build script in
backend/services/package.jsonBefore:
"build": "nest build"Changed it to:
"build": "tsc --project tsconfig.json && tsc-alias"backend/services/libs/core/src/app-config/app-config.module.tsBefore:
path: path.join(__dirname, "/shared/src/i18n/")Changed it to:
path: path.join(__dirname, "../../../../libs/shared/src/i18n")sharedfolder inbackend/services/libs/shared/srcwith the following code:Ran
yarn build. This creates a dist folder in backend/servicesChange all handler paths in serverless.yml to point to dist
In
serverless.yml, commented out the serverless-plugin-typescript:Copied the i18n folder from
backend/services/libs/shared/src/i18ntobackend/services/dist/libs/shared/srcNow, running the serverless invoke command (this one) successfully added tables to both databases and created a root user in the system.
Started the backend with
sls offline --stage=localFrontend
Moved to
/weband ranyarn installChanged
VITE_APP_BACKENDinweb/.envto:VITE_APP_BACKEND = http://localhost:3000/localyarn devto run the frontend on http://localhost:3030/