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

我想在微信小程序里面集成zxing-wasm,可以直接调用wasm文件吗? #106

Open
greenking19 opened this issue May 21, 2024 · 8 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@greenking19
Copy link

(我就不写英文了哈
我想web & 小程序都实现扫二维码连续扫码
我参考了jsQr、zxing-js、zxing-wasm 我发现

  1. jsQr效率有点低
  2. zxing-js(我在nodejs都跑不起来 连demo都没有
  3. zxing-wasm 不得不说效率是真的 fast 🚀!

我现在web使用了vue-qrcode-reader实现了 效果很好
我现在想在小程序里面使用zxing-wasm,但是小程序构造npm包的时候报错了
我想如果可以直接调用wasm就好了, 可以直接把数据给wasm计算然后返回结果吗?

@Sec-ant
Copy link
Owner

Sec-ant commented May 21, 2024

WASM 中的代码为了和 JS 侧进行数据交互会一些胶水代码,这部分胶水代码和 .wasm 文件是使用 emscripten 这样的工具构建时一同得到的产物,所以如果你想直接调用的 .wasm 中的函数的话,你还是需要这部分胶水代码中的逻辑,完全自己实现的话工作量可能会比较大。zxing-wasm 这个库是在这部分胶水代码之上又增加了一层封装,主要是做了一些接口数据类型的映射和 WASM 模块的管理。

所以我个人感觉最好先定位小程序构建时具体的报错信息和原因,然后判断一下这部分报错代码是出现在直接作为构建产物的胶水代码内,还是在这个仓库里封装代码中,然后再考虑怎么解决比较好?

@greenking19
Copy link
Author

WASM 中的代码为了和 JS 侧进行数据交互会一些胶水代码,这部分胶水代码和 .wasm 文件是使用 emscripten 这样的工具构建时一同得到的产物,所以如果你想直接调用的 .wasm 中的函数的话,你还是需要这部分胶水代码中的逻辑,完全自己实现的话工作量可能会比较大。zxing-wasm 这个库是在这部分胶水代码之上又增加了一层封装,主要是做了一些接口数据类型的映射和 WASM 模块的管理。

所以我个人感觉最好先定位小程序构建时具体的报错信息和原因,然后判断一下这部分报错代码是出现在直接作为构建产物的胶水代码内,还是在这个仓库里封装代码中,然后再考虑怎么解决比较好?

这是报错的信息

message:发生错误
SyntaxError: parse js file (/zxing-wasm/dist/cjs/full/index.js) failed: Unexpected token (2:12339)
ideVersion: 1.06.2404301
osType: darwin-arm64
time: 2024-05-21 17:21:16

定位到错误了
image
只需要把源代码一下就可以了

try{return pr.grow(t),ie(),1}catch{}}
//replace 👇🏻
try{return pr.grow(t),ie(),1}catch(err){}}

好像是小程序开发程序构建npm的时候一些校验造成的
我现在试试能不能在小程序里面运行zxing-wasm 🤓

@greenking19
Copy link
Author

试了,编译npm可以了。但是跑不了 小程序的问题吧(真的难受
目前只能在webview去跑zxing-wasm,效率一样很快

@Sec-ant
Copy link
Owner

Sec-ant commented May 21, 2024

这是报错的信息

message:发生错误
SyntaxError: parse js file (/zxing-wasm/dist/cjs/full/index.js) failed: Unexpected token (2:12339)
ideVersion: 1.06.2404301
osType: darwin-arm64
time: 2024-05-21 17:21:16

定位到错误了 image 只需要把源代码一下就可以了

try{return pr.grow(t),ie(),1}catch{}}
//replace 👇🏻
try{return pr.grow(t),ie(),1}catch(err){}}

好像是小程序开发程序构建npm的时候一些校验造成的 我现在试试能不能在小程序里面运行zxing-wasm 🤓

这个 optional catch binding 语法是在 es2019 之后支持的,可能是因为小程序运行环境还不支持这个语法,这个解决起来比较容易,如果构建工具支持 babel 的话可以用这个插件 https://babeljs.io/docs/babel-plugin-transform-optional-catch-binding 在构建时转译。

试了,编译npm可以了。但是跑不了 小程序的问题吧(真的难受

我不太了解小程序开发,但我查了一下小程序这边的用于加载 .wasm 的接口应该是 WXWebAssembly: https://developers.weixin.qq.com/miniprogram/dev/framework/performance/wasm.html 目前 Emscripten 直接的构建产物肯定是不支持这样的环境的,不过适配起来看上去可能不会很困难:

  1. feature help: target to WXAssembly  emscripten-core/emscripten#16153
  2. https://developers.weixin.qq.com/community/develop/doc/000ca895518d6870211df985c56000

我有空的话会看看

@greenking19
Copy link
Author

好的 谢谢🥳
我现在查一下看看
非常感谢你

@Sec-ant
Copy link
Owner

Sec-ant commented May 23, 2024

我发现小程序开发使用的工具链比我预想中的限制要多,所以我现在不太确定这个库是否能够适配小程序了。#107 增加了一个专门给小程序调用的包入口 "miniprogram",去掉了 optional catch binding 语法,但是像是 WXWebAssembly 等这些都还没有替换,而且我预计为了让它能在小程序环境中运行至少还需要 polyfill 很多接口(Blob, fetch 等等),欢迎有经验的朋友提交 PR~

@Sec-ant Sec-ant added help wanted Extra attention is needed enhancement New feature or request labels May 23, 2024
@greenking19
Copy link
Author

我发现小程序开发使用的工具链比我预想中的限制要多,所以我现在不太确定这个库是否能够适配小程序了。#107 增加了一个专门给小程序调用的包入口 "miniprogram",去掉了 optional catch binding 语法,但是像是 WXWebAssembly 等这些都还没有替换,而且我预计为了让它能在小程序环境中运行至少还需要 polyfill 很多接口(Blob, fetch 等等),欢迎有经验的朋友提交 PR~

不好意思,刚看到comment
是的, 我觉得限制好多,好像第三方npm包里面带有wasm的话,用微信开发工具构建npm的时候就会报错

@greenking19
Copy link
Author

我看到了你发了一个wx版本的,非常感谢!
我明天试试看
我对wasm经验不是很多,可能提供不了很多帮助

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants