vladmandic / face-api

FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS
https://vladmandic.github.io/face-api/demo/webcam.html
MIT License
824 stars 149 forks source link

Error when deployed on Heroku, potentially due to minification #157

Closed dancherb closed 1 year ago

dancherb commented 1 year ago

Issue Description

When the project is built and deployed on Heroku, the following error appears. This error does not appear when using the standard face-api.js npm package: Uncaught SyntaxError: Invalid left-hand side expression in postfix operation

This references the following minified code: async nextState(e){await e;let t=await wF(this.iterators,function(e){return e instanceof wJ?{value:e.next().then(e=>(0++,e.done&&0++,e.value)),recurse:!1}:{value:null,recurse:!0}});

It seems that "0++" is causing the issue here. This appears to be minified from the following function in @tensorflow\tfjs\node_modules\@tensorflow\tfjs-data\src\iterators\lazy_iterator.ts. It appears that the variables numIterators and iteratorsDone are reduced to simply 0, thus giving the code 0++.

 let numIterators = 0;
    let iteratorsDone = 0;

    function getNext(container: IteratorContainer): DeepMapAsyncResult {
      if (container instanceof LazyIterator) {
        const result = container.next();
        return {
          value: result.then(x => {
            numIterators++;
            if (x.done) {
              iteratorsDone++;
            }
            return x.value;
          }),
          recurse: false
        };
      } else {
        return {value: null, recurse: true};
      }
    }

**Environment

vladmandic commented 1 year ago

good job on tracing it down. it seems this will need a fix from core tfjs libs, not faceapi. but for that, need to narrow it down:

  1. is this issue Heroku specific or does it happen with local NextJS deployment?
  2. can you create a reproduction using core tfjs (without faceapi)

if you manage to prove (1), i can help with (2) and then work directly with tfjs team on resolution.

vladmandic commented 1 year ago

@dancherb any updates?

dancherb commented 1 year ago

Hey @vladmandic, thanks for checking in - I managed to work around this issue by passing swcMinify: false in next.config.js. I hoped this would use a different minification process which would avoid the error, and it did! So a bit of a lazy solution but hey 💃

vladmandic commented 1 year ago

glad you found it!

btw, per Vercel, swcMinify is had quite a few issues in the past:

anyhow, I'm closing the issue for now, feel free to post further with any questions/comments/concerns.