AnomalyInnovations / serverless-bundle

Optimized packages for ES6 and TypeScript Node.js Lambda functions without any configuration.
https://serverless-stack.com/chapters/package-lambdas-with-serverless-bundle.html
MIT License
533 stars 157 forks source link

"Cannot find module" error when working with Puppeteer #81

Open richja opened 4 years ago

richja commented 4 years ago

I am trying to follow structure of https://github.com/AnomalyInnovations/serverless-stack-demo-ext-api

But cannot get work serverless-bundle together with chrome-aws-lambda in order to use puppeteer.

When service is started with sls offline and endpoint is hit with payload to trigger the function, error below is thrown.

The function works correctly when serverless-bundle is not used. Seems like it is looking for it at the place which does not even exist.

Thank you for any help or ideas.

Serverless: Failure: Cannot find module 'C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service/puppeteer/lib/FrameManager'
Error: Cannot find module 'C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service/puppeteer/lib/FrameManager'
    at webpackContextResolve (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\chrome-aws-lambda\source sync ^.*\puppeteer\lib\.*$:15:1)
    at webpackContext (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\chrome-aws-lambda\source sync ^.*\puppeteer\lib\.*$:10:1)
    at Function.get puppeteer [as puppeteer] (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\chrome-aws-lambda\source\index.js:194:7)
    at ../../../services/checker/handler.js.exports.check (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\handler.js:29:34)
    at C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\serverless-offline\src\ApiGateway.js:941:17
    at new Promise (<anonymous>)
    at handler (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\serverless-offline\src\ApiGateway.js:540:16)
    at module.exports.internals.Manager.execute (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\toolkit.js:41:33)    at Object.internals.handler (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\handler.js:46:48)
    at exports.execute (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\cm\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\chrome-aws-lambda\source\index.js:194:7)
    at ../../../services/checker/handler.js.exports.check (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\.webpack\service\webpack:\C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\handler.js:29:34)
    at C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\serverless-offline\src\ApiGateway.js:941:17
    at new Promise (<anonymous>)
    at handler (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\serverless-offline\src\ApiGateway.js:540:16)
    at module.exports.internals.Manager.execute (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\toolkit.js:41:33)    at Object.internals.handler (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\handler.js:46:48)
    at exports.execute (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\handler.js:31:36)
    at Request._lifecycle (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\request.js:312:68)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)      
    at Request._execute (C:\xampp7\htdocs\projects7\pokom\pokom-sls\services\checker\node_modules\@hapi\hapi\lib\request.js:221:9)

Versions

Samples

Handler.js (just an excerpt)

const chromium = require('chrome-aws-lambda');

try {
        browser = await chromium.puppeteer.launch({
            args: chromium.args,
            defaultViewport: chromium.defaultViewport,
            executablePath: await chromium.executablePath,
            headless: true,
            ignoreDefaultArgs: ['--disable-extensions']
        });

        let page = await browser.newPage();
        //execute puppeteer commands here...
    }

Serveless.yml

const chromium = require('chrome-aws-lambda');

try {
org: jq
app: checkApp
service: checker

provider:
  name: aws
  region: eu-west-1
  stage: dev
  versionFunctions: false
  # here we put the layers we want to use
  layers:
    # https://github.com/shelfio/chrome-aws-lambda-layer
    - arn:aws:lambda:${self:provider.region}:764866452798:layer:chrome-aws-lambda:8
  # function parameters
  runtime: nodejs12.x
  memorySize: 1024 # 2048 recommended
  timeout: 30

functions:
  check:
    handler: handler.check
    events:
      - http:
          path: /
          method: post
          request:
            parameters:
              paths:
                url: true

plugins:
  - serverless-jest-plugin
  - serverless-offline
  - serverless-bundle

package:
  individually: true
  exclude:
    - node_modules/puppeteer/.local-chromium/**

custom:
  ${file(../../serverless.common.yml):custom}
BhuvaneshwaranR commented 4 years ago

Hi, I've tested package exclude option is not working as excepted and there is an alternate way to resolve, we've to leverage the feature of serverless-webpack external options . The solution is already been implemented(https://github.com/AnomalyInnovations/serverless-bundle/pull/84). It needs to be tested and published by author @jayair

jayair commented 4 years ago

For somebody that comes across this, there's a new option if you are including packages via a Layer — forceExclude. You can read more about it here — https://github.com/AnomalyInnovations/serverless-bundle#externals-vs-forceexclude