2016-01-18 24 views
12

Zastanawiam się, czy w rzeczywistości można obsługiwać standardową składnię Web Worker w pakiecie sieci Web (np. var worker = new Worker('my-worker-file.js');) i jak?Jak obsługiwać "standardową" składnię Web Workers za pomocą pakietu internetowego?

Wiem o worker-loader, ale o ile rozumiem, potrzebuje określonej składni i nie jest zgodna ze standardową.

Innymi słowy, czy możliwe jest pakowanie tego pliku za pomocą pakietu internetowego bez zmiany kodu? ->https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js#L8

Z browserify, użyłbym transformacji workerify, ale nie mogę znaleźć niczego w świecie webpacka.

+0

chcesz użyć pakietu Webpack, ale nie jego modułu ładującego do obsługi typu pliku? – Vishwanath

+4

Nie mam nic przeciwko używaniu ładowarki. Ale moduł ładujący wymaga aktualizacji kodu źródłowego o niestandardową składnię. Wolę znaleźć rozwiązanie, które pasuje do standardowej składni Worker i nie wymaga zmiany źródła. – dhar

+0

Powiązane: Ciekawe podejście do sposobu _inline_ a worker, bez używania wtyczki webpack/browersify: https://twitter.com/rauschma/status/820286148765425664 – dhar

Odpowiedz

6

Możesz skonfigurować Webpack, aby spakować plik roboczy do js w oddzielny pakiet. W webpack.config.js:

{ entry: { bundle: './app/main.js', worker: './app/my-worker-file.js' }, output: { filename: '[name].js' } ... }

ten sposób można uzyskać dwie wiązki: bundle.js z głównej aplikacji i worker.js z punkt_wejścia pracowników. Następnie, w głównym pakiecie, możesz zrobić w zasadzie to samo. Ilekroć coś jest przez niego ładowane, tworzy on osobny wpis, który jest automatycznie nazywany [hash].worker.js. Następnie przechowuje tę nazwę pliku w funkcji zwróconej przez require('worker!...'), która po prostu przekazuje ją do new Worker. Na koniec jest to dokładnie ten sam proces, który opisałem powyżej, z tą tylko różnicą, że nazwa pakietu jest automatycznie zarządzana.

+2

Nadal denerwuję, że muszę odwoływać się do nazwy pakietu ('worker .js' w twoim przykładzie) zamiast źródłowego pliku wejściowego ('./app/my-worker-file.js'). Tworzy zależność między kodem źródłowym a konfiguracją pakietu WWW, której próbowałem uniknąć. Myślę jednak, że jest to obecnie najlepsze dostępne rozwiązanie, więc dziękuję za odpowiedź! – dhar

+0

W rzeczywistości nie ma problemu z używaniem pliku javascript, nawet samodzielnego pliku, takiego jak './App/my-worker-file.js', np. Za pomocą' CopyWebpackPlugin', aby dostarczyć plik do katalogu kompilacji. Ale jeśli nie używasz pakunku, tracisz zdolność do 'require' zależności od twojego pliku roboczego. –

+1

Nawiasem mówiąc - unikanie zależności między konfiguracją Webpack a źródłem jest dokładnie tym, co daje 'worker-loader'. Jeśli nie chcesz jawnie pisać 'require ('worker! ....')' 'w twoim kodzie źródłowym (powiedzmy, aby uniknąć wyraźnej zależności od webpacka), to możesz po prostu skonfigurować WebPacka, aby używał loadera: 'module: {ładowarki: [{test: /\.worker.js$/, loader: 'worker'}]}' –

Powiązane problemy