Skip to content

adapter-vercel — external option breaks dependecies #5024

@acarl005

Description

@acarl005

Describe the bug

I have deployed a SvelteKit app to Vercel using @sveltejs/adapter-vercel. My serverless function is throwing this error:

[POST] /query                           00:15:09:41

2022-05-22T04:15:09.519Z	undefined	ERROR	
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'pgsql-parser' imported from /var/task/index.js
    at new NodeError (node:internal/errors:371:5)
    at packageResolve (node:internal/modules/esm/resolve:930:9)
    at moduleResolve (node:internal/modules/esm/resolve:976:18)
    at defaultResolve (node:internal/modules/esm/resolve:1078:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:79:40)
    at link (node:internal/modules/esm/module_job:78:36) 
{  code: 'ERR_MODULE_NOT_FOUND'}
RequestId: f8a6e809-859e-4f10-ac26-14f5194f92fa 
Error: Runtime exited with error: exit status 1 Runtime.ExitError

I definitely have "pgsql-parser" listed in my dependencies in my package.json. My svelte.config.js looks something like this:

import fs from "fs"
import path from "path"
import vercel from "@sveltejs/adapter-vercel"

const packageJson = JSON.parse(fs.readFileSync("./package.json", "utf8"))

/** @type {import("@sveltejs/kit").Config} */
const config = {
  kit: {
    adapter: vercel({
      edge: false,
      external: Object.keys(packageJson.dependencies),
      split: false
    }),
    vite: {
      // stuff...
    }
  }
}

export default config

I have excluded the runtime dependencies from the bundle. This is necessary because 1 of my dependencies is the Postgres node.js driver,"pg", which relies on native addons, and it cannot be bundled. The Vercel docs say that the dependencies will get automatically installed. However, it seems that my function is unable to find my dependencies.

How can I make sure my dependencies are available at function runtime without bundling?

Reproduction

I have a simpler reproduction here. When I deploy that to Vercel, it crashes in the hook because '@lukeed/uuid isn't found.

Logs

[GET] /favicon.ico
01:02:12:22

2022-05-22T05:02:12.310Z	3fbcc9e4-eb1e-4e7d-9ab0-69e65ab19948	ERROR
	Unhandled Promise Rejection
{
  "errorType": "Runtime.UnhandledPromiseRejection",
  "errorMessage": "Error: Cannot find module '@lukeed/uuid'\nRequire stack:\n- /var/task/index.js",
  "reason": {
    "errorType": "Error",
    "errorMessage": "Cannot find module '@lukeed/uuid'\nRequire stack:\n- /var/task/index.js",
    "code": "MODULE_NOT_FOUND",
    "requireStack": [
      "/var/task/index.js"
    ],
    "stack": [
      "Error: Cannot find module '@lukeed/uuid'",
      "Require stack:",
      "- /var/task/index.js",
      "    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)",
      "    at Function.Module._load (node:internal/modules/cjs/loader:778:27)",
      "    at Module.require (node:internal/modules/cjs/loader:1005:19)",
      "    at require (node:internal/modules/cjs/helpers:102:18)",
      "    at .svelte-kit/output/server/chunks/hooks-0bab96cd.js (/var/task/index.js:5495:19)",
      "    at __init (/var/task/index.js:8:56)",
      "    at /var/task/index.js:8166:59",
      "    at processTicksAndRejections (node:internal/process/task_queues:96:5)",
      "    at async Server.respond (/var/task/index.js:8166:23)",
      "    at async Server.serverless_default (/var/task/index.js:8228:20)"
    ]
  },
  "promise": {},
  "stack": [
    "Runtime.UnhandledPromiseRejection: Error: Cannot find module '@lukeed/uuid'",
    "Require stack:",
    "- /var/task/index.js",
    "    at process.<anonymous> (file:///var/runtime/index.mjs:775:15)",
    "    at process.emit (node:events:532:35)",
    "    at emit (node:internal/process/promises:133:20)",
    "    at processPromiseRejections (node:internal/process/promises:260:27)",
    "    at processTicksAndRejections (node:internal/process/task_queues:97:32)"
  ]
}
 	Unknown application error occurred

System Info

Vercel serverless function

Severity

blocking all usage of SvelteKit

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingp1-importantSvelteKit cannot be used by a large number of people, basic functionality is missing, etc.pkg:adapter-vercelPertaining to the Vercel adapter

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions