Error when deployed on Heroku, potentially due to minification
dancherb opened this issue · 4 comments
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
- Module version? @vladmandic/face-api": "^1.7.9", "@tensorflow/tfjs-node": "4.2.0",
- Built-in demo or custom code? Custom code based on built-in demo.
- Type of module used (e.g.
js
,esm
,esm-nobundle
)? ESM. - Browser or NodeJS and version (e.g. NodeJS 14.15 or Chrome 89)? Node 16.x, occurs on all Chromium browsers.
- OS and Hardware platform (e.g. Windows 10, Ubuntu Linux on x64, Android 10)? Hosted with next.js and node.js on Heroku stack 22 (Ubuntu 22.04).
- Packager (if any) (e.g, webpack, rollup, parcel, esbuild, etc.)? Next.js 13.1.6
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:
- is this issue Heroku specific or does it happen with local NextJS deployment?
- can you create a reproduction using core
tfjs
(withoutfaceapi
)
if you manage to prove (1), i can help with (2) and then work directly with tfjs team on resolution.
@dancherb any updates?
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 💃
glad you found it!
btw, per Vercel, swcMinify
is had quite a few issues in the past:
- some mentioned on vercel/next.js#30802
- and NextJS docs state minify is not supported yet, but i think those docs are just old: https://nextjs.org/docs/advanced-features/compiler)
anyhow, I'm closing the issue for now, feel free to post further with any questions/comments/concerns.