thomasmichaelwallace / serverless-better-credentials

Better AWS credentials resolution plugin for serverless
MIT License
54 stars 9 forks source link

Error: Cannot find module '@serverless/utils/log' after installing and enabling #14

Closed mjuopperi closed 1 year ago

mjuopperi commented 1 year ago

Describe the bug After installing the plugin with npm install --dev serverless-better-credentials and adding it as first plugin in serverless.yml, serverless command produces an error Error: Cannot find module '@serverless/utils/log' (full error below).

I also tried serverless plugin install --name serverless-better-credentials and got the same result.

If I remove it from plugins, sls command works again.

To Reproduce

  1. Create serverles project (I used aws-python template)
  2. Install this plugin
  3. Run serverless

Expected behavior No error

Desktop (please complete the following information):

Node version v14.19.1

Additional context

serverless version

serverless --version                                          
Framework Core: 3.23.0
Plugin: 6.2.2
SDK: 4.3.2

serverless.yml

service: sls-project

frameworkVersion: '3'

provider:
  name: aws
  # https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
  runtime: python3.9
  region: eu-west-1
  # https://www.serverless.com/framework/docs/providers/aws/guide/deploying#deployment-method
  deploymentMethod: direct
  stage: dev
  profile: <aws profile name>

functions:
  hello:
    handler: handler.hello

plugins:
  - serverless-better-credentials
  - serverless-python-requirements

Full error

Environment: darwin, node 14.19.1, framework 3.23.0, plugin 6.2.2, SDK 4.3.2
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: Cannot find module '@serverless/utils/log'
Require stack:
- /Users/user/Code/Projects/sls-project/node_modules/serverless-better-credentials/dist/ServerlessBetterCredentials.js
- /Users/user/Code/Projects/sls-project/node_modules/serverless-better-credentials/dist/index.js
- /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/utils/import-module.js
- /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/classes/plugin-manager.js
- /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/serverless.js
- /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/scripts/serverless.js
- /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/bin/serverless.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/Users/user/Code/Projects/sls-project/node_modules/serverless-better-credentials/dist/ServerlessBetterCredentials.js:6:15)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/Users/user/Code/Projects/sls-project/node_modules/serverless-better-credentials/dist/index.js:8:55)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at module.exports (/Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/utils/import-module.js:5:12)
    at PluginManager.requireServicePlugin (/Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/classes/plugin-manager.js:171:14)
    at PluginManager.resolveServicePlugins (/Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/classes/plugin-manager.js:198:29)
    at PluginManager.loadAllPlugins (/Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/classes/plugin-manager.js:136:47)
    at Serverless.init (/Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/lib/serverless.js:141:30)
    at async /Users/user/.nvm/versions/node/v14.19.1/lib/node_modules/serverless/scripts/serverless.js:591:7
thomasmichaelwallace commented 1 year ago

Interesting -

I think this is because you're using a globally installed serverless, and the plugin is loading locally. I'll need to check to see how other plugins are working around this.

I think you can fix this immediately for yourself by running npm install --dev serverless inside your working directory.

mjuopperi commented 1 year ago

That does fix it for me. It prints Running "serverless" from node_modules and works. Thank you.

Should I have package.json with serverless and this package in dev deps for other users of the project to set it up? I'm working on a python project and only have the serverless generated package-lock.json in my project.

thomasmichaelwallace commented 1 year ago

Good to hear 😄

I would recommend (and I think most would too) that you use a locally (i.e. repo level) install of serverless with a checked in package.json. That way anyone using your repo keeps their versions of serverless and any plugins in sync. Doing this will saving you from future local-version mismatch headaches when new features are added, and make it easier to reproduce your builds.

Nevertheless - people do install serverless globally, so I'll update the readme to cover that use case!

thomasmichaelwallace commented 1 year ago

(I'm closing this now the documentation has been updated. All the best on your serverless journey!)