serverless-bundle
serverless-bundle copied to clipboard
Module not found: Error: Can't resolve 'hiredis'
I'm migrating a project using my usual webpack/babel config to serverless-bundle.
It works fine when running serverless offline start, but not when running npx sls deploy:
yarn deploy
yarn run v1.17.3
$ NODE_ENV=staging npx sls deploy
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke
Serverless: Load command invoke:local
Serverless: Load command info
Serverless: Load command logs
Serverless: Load command metrics
Serverless: Load command print
Serverless: Load command remove
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command slstats
Serverless: Load command plugin
Serverless: Load command plugin
Serverless: Load command plugin:install
Serverless: Load command plugin
Serverless: Load command plugin:uninstall
Serverless: Load command plugin
Serverless: Load command plugin:list
Serverless: Load command plugin
Serverless: Load command plugin:search
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command webpack
Serverless: Load command offline
Serverless: Load command offline:start
Serverless: Load command dotenv
Serverless: Load command create_domain
Serverless: Load command delete_domain
Serverless: DOTENV: Loading environment variables from .env.staging:
Serverless: - REDIS_URL
Serverless: - REDIS_PASSWORD
Serverless: - GRAPHCMS_ENDPOINT
Serverless: - GRAPHCMS_TOKEN
Serverless: Invoke deploy
Serverless: Invoke package
Serverless: Invoke aws:common:validate
Serverless: Invoke aws:common:cleanupTempDir
Serverless: Invoke webpack:validate
Serverless: WARNING: More than one matching handlers found for 'src/functions/cache-query'. Using 'src/functions/cache-query.js'.
Serverless: WARNING: More than one matching handlers found for 'src/functions/refresh-cache'. Using 'src/functions/refresh-cache.js'.
Serverless: Invoke webpack:compile
Serverless: Bundling with Webpack...
ERROR in /Users/vadorequest/dev/cache-tfp/node_modules/redis-parser/lib/hiredis.js
Module not found: Error: Can't resolve 'hiredis' in '/Users/vadorequest/dev/cache-tfp/node_modules/redis-parser/lib'
@ /Users/vadorequest/dev/cache-tfp/node_modules/redis-parser/lib/hiredis.js 3:14-32
@ /Users/vadorequest/dev/cache-tfp/node_modules/redis-parser/lib/parser.js
@ /Users/vadorequest/dev/cache-tfp/node_modules/redis-parser/index.js
@ /Users/vadorequest/dev/cache-tfp/node_modules/redis/index.js
@ /Users/vadorequest/dev/cache-tfp/src/utils/redis.js
@ /Users/vadorequest/dev/cache-tfp/src/functions/cache-query.js
Error --------------------------------------------------
Webpack compilation error, see above
For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
Stack Trace --------------------------------------------
Error: Webpack compilation error, see above
at _.forEach.compileStats (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/lib/compile.js:38:19)
at arrayEach (/Users/vadorequest/dev/cache-tfp/node_modules/lodash/lodash.js:516:11)
at Function.forEach (/Users/vadorequest/dev/cache-tfp/node_modules/lodash/lodash.js:9342:14)
at BbPromise.fromCallback.then.stats (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/lib/compile.js:31:11)
at finalCallback (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/MultiCompiler.js:247:12)
at runWithDependencies.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/MultiCompiler.js:270:6)
at done (/Users/vadorequest/dev/cache-tfp/node_modules/neo-async/async.js:2931:13)
at runCompilers (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/MultiCompiler.js:174:48)
at err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/MultiCompiler.js:181:7)
at compiler.run (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/MultiCompiler.js:263:7)
at finalCallback (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:253:39)
at hooks.done.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:269:13)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:15:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at onCompiled (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:267:21)
at hooks.afterCompile.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:664:15)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at compilation.seal.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:661:31)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at hooks.optimizeAssets.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1403:35)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at hooks.optimizeChunkAssets.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1394:32)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at hooks.additionalAssets.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1389:36)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at hooks.optimizeTree.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1385:32)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at Compilation.seal (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1322:27)
at compilation.finish.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:658:18)
at hooks.finishModules.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1245:4)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:24:1)
at AsyncSeriesHook.lazyCompileHook (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/Hook.js:154:20)
at Compilation.finish (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1237:28)
at hooks.make.callAsync.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compiler.js:655:17)
at _err0 (eval at create (/Users/vadorequest/dev/cache-tfp/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:11:1)
at _addModuleChain (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1169:12)
at processModuleDependencies.err (/Users/vadorequest/dev/cache-tfp/node_modules/webpack/lib/Compilation.js:1081:9)
at process._tickCallback (internal/process/next_tick.js:61:11)
From previous event:
at ServerlessPlugin.compile (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/lib/compile.js:16:8)
From previous event:
at Object.webpack:compile:compile [as hook] (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/index.js:160:10)
at BbPromise.reduce (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:55)
From previous event:
at PluginManager.invoke (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:22)
at PluginManager.spawn (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:466:17)
at ServerlessPlugin.BbPromise.bind.then.then (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/index.js:101:51)
From previous event:
at Object.before:package:createDeploymentArtifacts [as hook] (/Users/vadorequest/dev/cache-tfp/node_modules/serverless-webpack/index.js:101:10)
at BbPromise.reduce (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:55)
From previous event:
at PluginManager.invoke (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:22)
at PluginManager.spawn (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:466:17)
at Deploy.BbPromise.bind.then (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/plugins/deploy/deploy.js:122:50)
From previous event:
at Object.before:deploy:deploy [as hook] (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/plugins/deploy/deploy.js:107:10)
at BbPromise.reduce (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:55)
From previous event:
at PluginManager.invoke (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:448:22)
at PluginManager.run (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/classes/PluginManager.js:479:17)
at variables.populateService.then (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/Serverless.js:112:33)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
at process.topLevelDomainCallback (domain.js:120:23)
From previous event:
at Serverless.run (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/lib/Serverless.js:99:6)
at serverless.init.then (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/bin/serverless:43:28)
at /Users/vadorequest/dev/cache-tfp/node_modules/graceful-fs/graceful-fs.js:111:16
at /Users/vadorequest/dev/cache-tfp/node_modules/graceful-fs/graceful-fs.js:45:10
at FSReqWrap.args [as oncomplete] (fs.js:140:20)
From previous event:
at initializeErrorReporter.then (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/bin/serverless:43:6)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
at process.topLevelDomainCallback (domain.js:120:23)
From previous event:
at /Users/vadorequest/dev/cache-tfp/node_modules/serverless/bin/serverless:28:46
at Object.<anonymous> (/Users/vadorequest/dev/cache-tfp/node_modules/serverless/bin/serverless:65:4)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at findNodeScript.then.existing (/Users/vadorequest/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/libnpx/index.js:268:14)
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
OS: darwin
Node Version: 10.15.3
Serverless Version: 1.46.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Here are the changes I've made (diff):

Is there a repo I can try this with? Or if you can give me a package.json and Lambda code to test it with.
Unfortunately, I can't share the project (private repo), but we're planning to open source it within weeks, so I guess I'll update that issue when we do so.
@jayair I'm running into this one now. I've updated my test case showing the failure:
https://gist.github.com/compwright/6908a7524cbe37e5e388ac1a8706aa9c
FYI, setting excludeDevDependencies to false appears to have no effect. See https://serverless.com/framework/docs/providers/aws/guide/packaging/
This worked for me: make redis-parser an external dependency at .serverless:
custom:
esbuild:
external:
- redis-parser