首页 > 解决方案 > NativeScript Web Worker,不断报错:com.tns.NativeScriptException: Failed to find module: relative to app//

问题描述

使用 Nativescript & Angular 我一直在尝试在 Web Worker 线程中实现时钟计数器。目前,应用程序使用一个setInterval函数启动时钟计数器,虽然这有效,但这意味着时钟计数器位于不需要的主线程上。因此,目的是将时钟计数器移动到不同的线程,因此不会增加主线程的负担。

我从简单开始,尝试编写从该页面获得的类似代码:frenetic.be

但是,尝试将工作进程初始化为w = new Worker("simple-timer.js");

但这导致我出现错误: ERROR Error: com.tns.NativeScriptException: Failed to find module: "simple-timer.js" relative to app// 尽管该文件与调用它的组件位于同一文件夹中。

所以,深入挖掘,我最终试图理解web workers 上的 nativescript 页面。 这似乎意味着它应该相对简单,并且new Worker()应该使用有效的路径参数调用。虽然这失败了,但与上面的错误相同。

因此,进行深入研究,我尝试遵循以下说明:github page 虽然这设法进一步搞砸了事情。尽管有一个步骤我无法执行(使用 Typescript 中的第 2 步)github 页面,但该部分 指的是该文件,references.d.ts但该文件显然不再是应用程序的 nativescript 文件集的一部分。

所以,我简化为更简单的方法,下载了 angular-demo 文件,看看我是否能理解他们遵循的方法。复制服务,几乎 1-1 并在我的组件中添加了一个测试方法。这给出了一个plugin错误,所以,我根据github 页面上的第 7 和 8 节添加了插件参考

虽然这让我走得很远,但我现在仍然会遇到同样的错误?

出于某种原因,文件路径似乎没有正确翻译,因此找不到正确的文件?

我还看过: 如何将 Nativescript worker 与 typescript 一起使用?

而这个 在Angular中使用web worker(多线程)和在NativeScript中使用Typescript是否可行?

有人对如何正确实施这个有有用的提示吗?

标签: javascriptangularjstypescriptmultithreadingnativescript

解决方案


您必须使用配置文件将您的工作人员文件包含到 Webpack 中,所以我刚刚将此行添加到 webpack.config.js 并且它有效!

new CopyWebpackPlugin([
  { from: { glob: 'css/**', dot: false } },
->{ from: { glob: 'backgroundTasks/**', dot: false } },
  { from: { glob: 'images/**', dot: false } },
  { from: { glob: 'fonts/**', dot: false } },
  { from: { glob: 'sounds/**', dot: false } },
  { from: { glob: '**/*.jpg', dot: false } },
  { from: { glob: '**/*.png', dot: false } },
 ], copyIgnore),

推荐阅读