2016-11-12 24 views
2

我有一個npm/webpack安裝程序,並且我的應用程序的一部分需要Web Workers。通常情況下,網絡工作者與此語法創建的:如何在npm中要求()網絡工作者?

var worker = new Worker('path/to/external/js/file.js');

在故宮,這是行不通的,因爲我使用的開發環境不接受這樣的路徑。必須使用require()包含文件。

我不能只是鏈接到文件,因爲這違反了交叉原點規則的事情。

是否有包含這些工作文件的策略?

+0

您是否試圖在* Node *中運行您的Web工作人員? – Pointy

+0

不,我正在開發前端。也許這個問題更適合webpack,但是我在遇到麻煩時需要將外部工作者文件包含在軟件包中。 –

+0

那麼'新的Worker()'代碼在客戶端上運行;不管Node或npm需要什麼,因爲就服務器而言,代碼只是內容。工作者文件將被從客戶端獲取,並傳遞一個普通的舊HTTP請求到你傳遞給'new Worker()'的URL。 – Pointy

回答

2

Webpack提供的裝載器worker-loader似乎爲您的問題提供瞭解決方案。該模塊可以安裝在npm install --save-dev worker-loader

看看how to use loaders,然後要求你的網絡工作者的文件,像這樣:

const Foo = require("worker!./path/to/external/js/file.js"); 
const fooWorker = new Foo(); 

注意worker!的路徑,它告訴的WebPack具體使用工裝載機前預先考慮。

如果您的設置正確,您應該也可以在工作文件本身中正常需要模塊。

+1

似乎工作!這非常簡單。謝謝。 –