serverless: Serverless package does not include all modules when a package.json file is provided

This is a (Bug Report)

Description

When deploying multiple versions of a service or just versions of the function within the service, but sometimes some modules are not included in the package in presence of a package.json file

  • What went wrong? When using sls deploy or sls deploy -f functionName or sls package the service.zip doest not include all my node_modules, when I checked the package I figured out that some modules were missing My tree:
lamba
  dir
  dir
  index.js
  package.json
  serverless.yml
  node_modules

My package.json file was something like this:

{
  "name": "lambda",
  "version": "1.0.0",
  "description": "lambda",
  "main": "index.js",
  "dependencies": {
    "handlebars": "^4.0.10",
    "html-pdf": "^2.1.0",
    "mathfinjs": "^1.0.2",
    "moment": "^2.18.1",
    "numeral": "^2.0.6",
    "path": "^0.12.7",
    "pdfkit": "^0.8.3",
    "pg": "^6.4.0",
    "request-promise": "^4.2.1"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "RAZ",
  "license": "ISC"
}
  • What did you expect should have happened?

That every time that I deploy a service/function the package be the same but request-promise and pg were missing

  • What was the config you used?
service: service

frameworkVersion: ">=1.8.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs6.10
  region: us-west-2
  versionFunctions: false

functions:
  function:
    handler: index.handler
    description: description
    memorySize: 1024
    timeout: 30
    role: arn-role
    tags:
      Department: IT
      Name: name
      Team: team
      TeamMember: TeamMember
    environment:
      var: value
      var: value
      var: value
      var: value
      var: value
    
  • What stacktrace or error message from your provider did you see?
{
  "errorMessage": "Cannot find module 'request-promise'",
  "errorType": "Error",
  "stackTrace": [
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)",
    "Object.<anonymous> (/var/task/index.js:14:23)",
    "Module._compile (module.js:570:32)",
    "Object.Module._extensions..js (module.js:579:10)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)"
  ]
}
Unable to import module 'index': Error
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/task/index.js:14:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

Similar or dependent issues:

Additional Data

Even using include: file was useless

The solution for me was to rename/remove package.json file

  • Serverless Framework Version you’re using: 1.16.1
  • Operating System: macOS Sierra 10.12.5

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Reactions: 5
  • Comments: 22 (7 by maintainers)

Most upvoted comments

Hey @xmissio thanks for opening! 👍

This could be related to https://github.com/serverless/serverless/pull/3889.

Could you try to re-deploy while opting out of the dev dependency exclusion functionality?

You can opt-out via:

package:
  excludeDevDependencies: false

I’m experiencing the same issue in version 1.26.0. Any one else?

I was seeing this issue as well on versions 1.26.1 and 1.27.2

  Error --------------------------------------------------

  ENOENT: no such file or directory, stat '/home/zac/Workspace/Services/graphql-service/node_modules/contents-service-client/node_modules/aws-sdk/node_modules/.bin/uuid'

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Forums:        forum.serverless.com
     Chat:          gitter.im/serverless/serverless

  Your Environment Information -----------------------------
     OS:                     linux
     Node Version:           8.10.0
     Serverless Version:     1.26.1

I fixed it by deleting my node_modules directory and reinstalling

Yes I am experiencing this with 1.26.1

Still getting { "errorMessage": "Cannot find module 'babel-runtime/regenerator'", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:417:25)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)", "Object.defineProperty.value (/var/task/validate_access_code.js:1:1473)", "r (/var/task/validate_access_code.js:1:220)", "Object.<anonymous> (/var/task/validate_access_code.js:1:1613)", "r (/var/task/validate_access_code.js:1:220)", "/var/task/validate_access_code.js:1:641", "Object.<anonymous> (/var/task/validate_access_code.js:1:650)" ] }

I am using sls version 1.28.0 and still facing the issue. I have tried using

excludeDevDependencies: false

option also but error still persist.

I added those lines but the error persist

I downgraded to 1.16.0 but error persisted, I deleted node_module directory, then npm install inside my service directory finally I execute sls deploy and it’s working now I just comment this to help The new bug started when I :

upgrade to 1.17.0

added this lines to my serverless.yml

package:
  excludeDevDependencies: false

and rename my package-json.txt to

package.json

and execute sls deploy