this.util.TextEncoder 不是仅在电子应用程序中的构造函数(在 chrome 中有效)
this.util.TextEncoder is not a constructor only in electron app (works in chrome)
我正在使用 tensorflow bodypix 模型创建一个 body 分割应用程序。它在浏览器中运行良好。我正在使用 webpack 来使用它的模块(见下文)
import * as wasm from "@tensorflow/tfjs-backend-wasm";
import * as tf from "@tensorflow/tfjs-core";
import * as bodyPix from "@tensorflow-models/body-pix";
wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
//some simple vanilla js code
});
//some more vanilla js code...
它在 chrome 中工作得很好,并且在 运行 npx webpack
之后给出预期的输出。
然而,当简单地通过创建一个主电子文件来使用电子运行它时,它只输出一个空白屏幕,并在控制台中显示以下错误-
Uncaught TypeError: this.util.TextEncoder is not a constructor
at new <anonymous> (main.js:2)
它指向的行来自一个缩小的代码,看起来像这样-
...SOME_CODE...&&Me().setPlatform("node",new class{
constructor(){this.util=n(758),this.textEncoder=new this.util.TextEncoder}...SOME_MORE_CODE...
我认为 electron 只是 chrome 没有顶栏,但这似乎是错误的。有人可以帮我吗
我正在使用以下版本-
"nodejs v12.16.3", "electron11.1.1", "tfjs2.8.2"
查看 chrome 和 electron-
的屏幕截图
IN CHROME(点击放大)
................................................ ...
IN ELECTRON(点击放大)
解决方案
我以前有过
wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
//some simple vanilla js code
});
在我的主要代码中,我已将文件夹从 wasm(dist/) 复制到项目文件夹。
从我的项目文件夹中删除相同的内容并将代码更改为 -
wasm.setWasmPaths("../node_modules/@tensorflow/tfjs-backend-wasm/dist/"); //or start from ./ if your main file is in same folder as node_modules
tf.setBackend("wasm").then(() => {
//...
});
我是怎么回到这里的?
首先感谢@edkeveked 的努力并指出我
Error loading TensorflowJS in Electron App (Nodejs)
我通过创建一个 electron hello world 项目然后添加 tfjs,然后添加 tfjs-backend-wasm 得到了解决方案。新项目工作正常,但即使将 node_modules 从新项目移动到旧项目也不适用于旧项目。但是一旦我改变了 wasm 路径,它就没有错误了。
更新:
现在我遇到了好几次这个问题,每次都通过创建一个新文件夹来解决,首先安装电子并首先创建一个简单的电子应用程序,然后安装其他依赖项并将旧代码复制到新文件夹中。(警告: 不要复制节点模块文件夹)
好像是tfjs或者electron的bug
我正在使用 tensorflow bodypix 模型创建一个 body 分割应用程序。它在浏览器中运行良好。我正在使用 webpack 来使用它的模块(见下文)
import * as wasm from "@tensorflow/tfjs-backend-wasm";
import * as tf from "@tensorflow/tfjs-core";
import * as bodyPix from "@tensorflow-models/body-pix";
wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
//some simple vanilla js code
});
//some more vanilla js code...
它在 chrome 中工作得很好,并且在 运行 npx webpack
之后给出预期的输出。
然而,当简单地通过创建一个主电子文件来使用电子运行它时,它只输出一个空白屏幕,并在控制台中显示以下错误-
Uncaught TypeError: this.util.TextEncoder is not a constructor
at new <anonymous> (main.js:2)
它指向的行来自一个缩小的代码,看起来像这样-
...SOME_CODE...&&Me().setPlatform("node",new class{
constructor(){this.util=n(758),this.textEncoder=new this.util.TextEncoder}...SOME_MORE_CODE...
我认为 electron 只是 chrome 没有顶栏,但这似乎是错误的。有人可以帮我吗 我正在使用以下版本-
"nodejs v12.16.3", "electron11.1.1", "tfjs2.8.2"
查看 chrome 和 electron-
的屏幕截图IN CHROME(点击放大)
................................................ ...
IN ELECTRON(点击放大)
解决方案
我以前有过
wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
//some simple vanilla js code
});
在我的主要代码中,我已将文件夹从 wasm(dist/) 复制到项目文件夹。
从我的项目文件夹中删除相同的内容并将代码更改为 -
wasm.setWasmPaths("../node_modules/@tensorflow/tfjs-backend-wasm/dist/"); //or start from ./ if your main file is in same folder as node_modules
tf.setBackend("wasm").then(() => {
//...
});
我是怎么回到这里的?
首先感谢@edkeveked 的努力并指出我Error loading TensorflowJS in Electron App (Nodejs)
我通过创建一个 electron hello world 项目然后添加 tfjs,然后添加 tfjs-backend-wasm 得到了解决方案。新项目工作正常,但即使将 node_modules 从新项目移动到旧项目也不适用于旧项目。但是一旦我改变了 wasm 路径,它就没有错误了。
更新:
现在我遇到了好几次这个问题,每次都通过创建一个新文件夹来解决,首先安装电子并首先创建一个简单的电子应用程序,然后安装其他依赖项并将旧代码复制到新文件夹中。(警告: 不要复制节点模块文件夹)
好像是tfjs或者electron的bug