从具有相对路径的模块引用Web工作者

时间:2016-04-18 19:15:28

标签: module typescript requirejs web-worker

长话短说:我在同一个文件夹中有一个模块SqlDataAdapter sda = new SqlDataAdapter("select employeeid,username, password from Employeeinfo where [UserName] = @username and [Password] = @password", con); sda.SelectCommand.Parameters.AddWithValue("@username", textBox1.Text); sda.SelectCommand.Parameters.AddWithValue("@password", textBox2.Text); 和一个网络工作者脚本baz.ts,但是当我引用它时,工作人员不会加载来自同一文件的相同路径(在工作人员的情况下,我显然是在加载js文件)。模块编译为AMD语法。

我有以下文件夹布局:

worker.ts

foo.ts bar.ts baz.ts 是模块, foo.ts 是导入的在 tests / test-a / test.ts 中,由相邻的 test.html 使用(这是代码运行的地方)。其余的依赖项可以通过文件夹布局轻松显示: foo.ts 导入 bar.ts ,然后导入 baz.ts 和从 worker.ts 创建一个worker - 更确切地说,从编译的MyApp |-- tests | `-- test-a | |-- test.html | `-- test.ts `-- lib |-- foo.ts `-- foo |-- |-- bar.ts <-- 'bar/worker' loaded here `-- bar |-- baz.ts `-- worker.ts 输出创建一个worker:

bar.ts

.js

了解 baz.ts worker.ts 如何位于相对于 bar.ts 的相同文件夹中(相应的{{1文件是在适当的位置创建的),但是工作者没有加载。它会尝试加载网址import {Baz} from "./bar/baz"; export class Bar { constructor() { var worker = new Worker("./bar/worker.js"); // same path as the above import // ... } }

我怎样才能这样做,以便我可以使用与导入模块旁边相同的相对路径来引用worker?

1 个答案:

答案 0 :(得分:2)

这很奇怪。

通常你正在进行的请求(或资源加载)是相对于加载的html文件的url,但如果是这种情况那么(正如我在评论中写的那样)它应该尝试加载来自tests/test-a/bar/worker.js

你可以做的是为你的工人建立一个绝对的网址并使用它,比如:

let url = new URL("lib/foo/bar.js", window.location.origin);
let worker = new Worker(url.toString());

可能不理想,但应该有效。