Cannot find node module in lambda function

I have a lambda function for sending email templates with its own package.json file:

{
  "name": "send-email",
  "version": "1.0.0",
  "description": "netlify functions:create - Send email with no SMTP server via 'sendmail' pkg",
  "main": "send-email.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "netlify",
    "serverless",
    "apis",
    "email",
    "js"
  ],
  "author": "Netlify",
  "license": "MIT",
  "dependencies": {
    "@sentry/node": "^5.24.2",
    "@sentry/tracing": "^5.24.2",
    "email-templates": "^7.1.0",
    "nodemailer-mailgun-transport": "^2.0.0",
    "pug": "^3.0.0"
  }
}

I’m using the plugin-functions-install-core plugin to install my lambda dependencies.

[[plugins]]
  package = "@netlify/plugin-functions-install-core"

When I deploy, my build log says everything was installed fine…

...
10:29:48 AM: (build.command completed in 17.4s)
10:29:48 AM: ​
10:29:48 AM: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
10:29:48 AM: β”‚ 4. onBuild command from @netlify/plugin-functions-core β”‚
10:29:48 AM: β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
10:29:48 AM: ​
10:29:48 AM: Packaging Functions from functions directory:
10:29:48 AM:  - generate-pdf/generate-pdf.js
10:29:48 AM:  - send-email/send-email.js
10:30:04 AM: ​
10:30:04 AM: (@netlify/plugin-functions-core onBuild completed in 15.2s)
10:30:04 AM: ​
...

And yet, I am running into this error in my functions log when I try to send an e-mail:

10:31:28 AM: 2020-10-21T17:31:28.103Z	76c21354-9995-4362-84e8-cd362648f8c9	ERROR	Unhandled Promise Rejection 	{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"Error: Cannot find module 'pug'\nRequire stack:\n- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js\n- /var/task/src/functions/send-email/node_modules/consolidate/index.js\n- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js\n- /var/task/src/functions/send-email/config.js\n- /var/task/src/functions/send-email/send-email.js\n- /var/task/send-email.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","reason":{"errorType":"Error","errorMessage":"Cannot find module 'pug'\nRequire stack:\n- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js\n- /var/task/src/functions/send-email/node_modules/consolidate/index.js\n- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js\n- /var/task/src/functions/send-email/config.js\n- /var/task/src/functions/send-email/send-email.js\n- /var/task/send-email.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","code":"MODULE_NOT_FOUND","requireStack":["/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js","/var/task/src/functions/send-email/node_modules/consolidate/index.js","/var/task/src/functions/send-email/node_modules/email-templates/lib/index.js","/var/task/src/functions/send-email/config.js","/var/task/src/functions/send-email/send-email.js","/var/task/send-email.js","/var/runtime/UserFunction.js","/var/runtime/index.js"],"stack":["Error: Cannot find module 'pug'","Require stack:","- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js","- /var/task/src/functions/send-email/node_modules/consolidate/index.js","- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js","- /var/task/src/functions/send-email/config.js","- /var/task/src/functions/send-email/send-email.js","- /var/task/send-email.js","- /var/runtime/UserFunction.js","- /var/runtime/index.js","    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)","    at Function.Module._load (internal/modules/cjs/loader.js:841:27)","    at Module.require (internal/modules/cjs/loader.js:1025:19)","    at require (internal/modules/cjs/helpers.js:72:18)","    at /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:939:33","    at /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:161:5","    at Promise._execute (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:384:9)","    at Promise._resolveFromExecutor (/var/task/src/functions/send-email/node_modules/bluebird/js/release/promise.js:518:18)","    at new Promise (/var/task/src/functions/send-email/node_modules/bluebird/js/release/promise.js:103:10)","    at promisify (/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:154:10)","    at exports.pug (/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:935:10)","    at /var/task/src/functions/send-email/node_modules/pify/index.js:33:11","    at new Promise (<anonymous>)","    at /var/task/src/functions/send-email/node_modules/pify/index.js:6:9","    at Object.apply (/var/task/src/functions/send-email/node_modules/pify/index.js:85:19)","    at Email.render (/var/task/src/functions/send-email/node_modules/email-templates/lib/index.js:218:37)"]},"promise":{"isFulfilled":false,"isRejected":true,"rejectionReason":{"errorType":"Error","errorMessage":"Cannot find module 'pug'\nRequire stack:\n- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js\n- /var/task/src/functions/send-email/node_modules/consolidate/index.js\n- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js\n- /var/task/src/functions/send-email/config.js\n- /var/task/src/functions/send-email/send-email.js\n- /var/task/send-email.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","code":"MODULE_NOT_FOUND","requireStack":["/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js","/var/task/src/functions/send-email/node_modules/consolidate/index.js","/var/task/src/functions/send-email/node_modules/email-templates/lib/index.js","/var/task/src/functions/send-email/config.js","/var/task/src/functions/send-email/send-email.js","/var/task/send-email.js","/var/runtime/UserFunction.js","/var/runtime/index.js"],"stack":["Error: Cannot find module 'pug'","Require stack:","- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js","- /var/task/src/functions/send-email/node_modules/consolidate/index.js","- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js","- /var/task/src/functions/send-email/config.js","- /var/task/src/functions/send-email/send-email.js","- /var/task/send-email.js","- /var/runtime/UserFunction.js","- /var/runtime/index.js","    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)","    at Function.Module._load (internal/modules/cjs/loader.js:841:27)","    at Module.require (internal/modules/cjs/loader.js:1025:19)","    at require (internal/modules/cjs/helpers.js:72:18)","    at /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:939:33","    at /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:161:5","    at Promise._execute (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:384:9)","    at Promise._resolveFromExecutor (/var/task/src/functions/send-email/node_modules/bluebird/js/release/promise.js:518:18)","    at new Promise (/var/task/src/functions/send-email/node_modules/bluebird/js/release/promise.js:103:10)","    at promisify (/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:154:10)","    at exports.pug (/var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js:935:10)","    at /var/task/src/functions/send-email/node_modules/pify/index.js:33:11","    at new Promise (<anonymous>)","    at /var/task/src/functions/send-email/node_modules/pify/index.js:6:9","    at Object.apply (/var/task/src/functions/send-email/node_modules/pify/index.js:85:19)","    at Email.render (/var/task/src/functions/send-email/node_modules/email-templates/lib/index.js:218:37)"]}},"stack":["Runtime.UnhandledPromiseRejection: Error: Cannot find module 'pug'","Require stack:","- /var/task/src/functions/send-email/node_modules/consolidate/lib/consolidate.js","- /var/task/src/functions/send-email/node_modules/consolidate/index.js","- /var/task/src/functions/send-email/node_modules/email-templates/lib/index.js","- /var/task/src/functions/send-email/config.js","- /var/task/src/functions/send-email/send-email.js","- /var/task/send-email.js","- /var/runtime/UserFunction.js","- /var/runtime/index.js","    at process.<anonymous> (/var/runtime/index.js:35:15)","    at process.emit (events.js:327:22)","    at process.EventEmitter.emit (domain.js:483:12)","    at eventToObjectGenerator.promiseCreated (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:258:33)","    at activeFireEvent (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:301:44)","    at fireRejectionEvent (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:703:14)","    at Promise._notifyUnhandledRejection (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:90:9)","    at Timeout.unhandledRejectionCheck [as _onTimeout] (/var/task/src/functions/send-email/node_modules/bluebird/js/release/debuggability.js:39:25)","    at listOnTimeout (internal/timers.js:549:17)","    at processTimers (internal/timers.js:492:7)"]}
10:31:28 AM: Duration: 86.00 ms	Memory Usage: 158 MB	Init Duration: 1900.00 ms	
10:31:28 AM: Unknown application error occurred

I’ve search this community forum as well as github for relevant information, but haven’t found a specific problem/solution

so far I have:

  • tried to downgrade pug to the matching version in the required dependencies
  • moved the pug dependency to my root package.json
  • specifically defined NODE_ENV=production?
  • attempted to convert the templating engine of the email service to handlebars (this failed for other reasons)
  • searched for alternative services that send templatized individual emails (I haven’t found one, but if you know of one please tell me)

no solution yet. I am going to explore some other options

Do you actually require pug in the file its used the function? Because if not then when everything is compiled etc it wont be there and wont be used. Can you show function code?

I’m using the email-templates package for sending emails. according to the documentation, you need to install the template dependencies, but don’t require them in the code.

I’ll try to manually require pug in my configuration and see if that resolved my issue!

Yeah I mean youve manually added it as a dependency so I would expect you need to require it. Let us know! :slight_smile: Hope it works. (Also if you have multiple functions or a file that calls the function can always try requiring it there, I had a similar issue and required it everywhere and the deduced where it needed to go)

thanks for your insight! that did the trick. I admit it feels a bit odd to have just require("pug"), but I guess it is what it is.

Glad I could help! It took me hours of debugging in my own situation. Please mark the solution so that hopefully it is easier to find for others! :slight_smile:

1 Like