Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make instascan module-friendly and greatly reduce package size #176

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

ArcanoxDragon
Copy link

@ArcanoxDragon ArcanoxDragon commented Aug 15, 2018

I was having issues with this library due to its dependency on babel-polyfill, as I needed to reference babel-polyfill on my own before this library. This was causing an error because that module insists on only being imported once. I also stumbled across #158 while searching for a solution, so I decided to take it upon myself to try and clean up the package a bit and make it more friendly in terms of compatibility with other modules and Webpack.

I changed everything to TypeScript, as this allows the usage of features such as async/await without needing babel-polyfill (TypeScript uses regenerator-runtime, which is perfectly happy to be imported more than once). This also provides typings for users who consume this as a module. Most of the code is functionally identical; it's just TypeScript-ified somewhat.

The biggest change I made was to switch from the 2 MB zxing.js library to the @zxing/library package, which reduced the minified bundle size of this module to 373 KB (which was the post-gzipped size mentioned in #158; it now becomes around 100 KB once gzipped).

I only made one change to the API, which is that the start function does not accept a camera. The camera can either be set using the { camera: Camera } property on the Scanner options, or can be changed later by setting scanner.camera and calling .start() again. This change was due to the way the new @zxing/library module consumes the video stream and should be fairly easy to migrate.

I made sure to update the documentation and the demo to reflect the changes. The demo was tested using a locally compiled instascan.min.js, and should work once published as long as the rawgit URL points to the new build artifact.

@ArcanoxDragon
Copy link
Author

Pardon all the little commits; not super familiar with Travis

@iHassan
Copy link

iHassan commented Mar 18, 2019

hey @briman0094,

I am using this pull request on my project. I have to say the reduced package size is pretty impressive. This should get merged with main package as well.
Your package works great on webcams and androids.
The only issue i'm facing is the back camera on iOS. Back camera won't open even if selected manually and automatically opens front camera. I have tested on iOS 11 and 12. Both seems to have this issue.

There are other fixes for this in newer pull requests like this one, #206
and this one, #207

Any chances you can take a look?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants