serverless/serverless

devDependencies are not excluded all of a sudden...

QAnders opened this issue · 1 comments

Are you certain it's a bug?

  • Yes, it looks like a bug

Is the issue caused by a plugin?

  • It is not a plugin issue

Are you using the latest v3 release?

  • Yes, I'm using the latest v3 release

Is there an existing issue for this?

  • I have searched existing issues, it hasn't been reported yet

Issue description

I found the issue for devDependencies not being excluded for the parent directory issue, but we have our serverless.yml in the root, along with te node_modules.

We have had this working fine previously, and the deploy size of the Lambdas has been around 31 MB.

Now we hit 110 MB and the deploy fails as the unpackaged size exceeds 360 MB(!).

Extracting the ZIP I can see that all dependecises are there, e.g. serverless, aws-sdk, eslint etc.

What have I messed up?

Service configuration (serverless.yml) content

frameworkVersion: '3'

package:
  individually: true
  excludeDevDependencies: true
  patterns:
    - '!volume/**' # exclude any Localstack temporary files/directories
    - '!coverage/**'
    - '!db-data/**'
    - '!.serverless/**'
    - '!.vscode/**'
    - '!test/**'
    - '!aws/**'
    - '!dist/**'


### Command name and used flags

sls deploy -s test

### Command output

```shell
The verbose logging shows it is excluding dependencise:

stage: test
Packaging
Excluding development dependencies for function "migrator"
Excluding development dependencies for function "create-access-key"
Excluding development dependencies for function "integrationInternal"
Excluding development dependencies for function "integrationExternal"
Excluding development dependencies for function "internalRoutes"


### Environment information

```shell
Framework Core: 3.38.0 (local)
Plugin: 7.2.2
SDK: 4.5.1

node v18.14.2 (npm v9.5.0)

The work around for now is to get the list of "real" dependencies is:

  1. rm -r node_modules
  2. npm install --omit=dev
  3. ls node_modules
  4. Copy the list (it's looong) and fix all directory names as e.g. - 'node_modules/@qvalia/**'
  5. add - '!node_modules/**' under patterns: in serverless.yml (to exclude anything under node_modules)
  6. Add the list of omit=dev modules to serverless.yml under the excluded !node_modules:
    image

Now you can deploy... From having 110MB deployment ZIP this brought us down to 22MB...