2016-01-18 26 views
12

Web Paketindeki “Standart sözdizimini” (örn. var worker = new Worker('my-worker-file.js');) nasıl kullanabileceğinizi gerçekten merak ediyorum ve nasıl?Web Workers web paketi ile "standart" sözdizimini nasıl kullanır?

worker-loader hakkında biliyorum ama anladığım kadarıyla belirli bir sözdizimi gerekiyor ve standart olanla uyumlu değil.

Başka bir deyişle, kodu değiştirmeden bu dosyayı web paketi ile paketlemek mümkün mü? ->https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js#L8

browserify ile workerify dönüşümü kullanıyorum, ancak webpack dünyasında hiçbir şey bulamıyorum.

+0

webpack paketi kullanmak istiyor ancak dosya türünü işlemek için yükleyicisini değil? – Vishwanath

+4

Bir yükleyici kullanmayı umursamıyorum. Ancak işçi-yükleyici, kaynak kodu standart olmayan bir sözdizimi ile güncellemeyi gerektirir. Standart Worker sözdizimine uyan ve kaynağı değiştirmek için gerekli olmayan bir çözüm bulmayı tercih ederim. – dhar

+0

Related: Herhangi bir webpack/browersify eklentisi kullanmadan bir çalışanın nasıl bir _inline olacağı hakkında ilginç bir yaklaşım: https://twitter.com/rauschma/status/820286148765425664 – dhar

cevap

6

Webpack'i, çalışan js dosyanızı ayrı bir pakete paketleyecek şekilde yapılandırabilirsiniz. webpack.config.js yılında: bundle.js işçi GirişNoktası ile ana uygulama ve worker.js ile:

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

Bu şekilde iki teklik olsun. Daha sonra, ana paketinizin içinde, temel olarak aynı şekilde new Worker('worker.js')

worker-loader'u yapabilirsiniz. Ne zaman bir şey yüklendiğinde, otomatik olarak [hash].worker.js olarak adlandırılan, konuşmak için ayrı bir paket girişi oluşturur. Daha sonra bu dosya adını require('worker!...')'dan döndürülen işleve, yalnızca new Worker'a iletir. Sonunda, tam olarak yukarıda anlattığım gibi, paketin isminin sizin için otomatik olarak yönetildiği tek farkla aynıdır.

+2

Paket adını ('worker') referans almaya ihtiyacım olduğu için hala can sıkıcıyım .js 'sizin örneğinizde) kaynak giriş dosyası yerine ('./app/my-worker-file.js'). Kaynak kod ile kaçınmaya çalıştığım web paketi yapılandırması arasında bir bağımlılık yaratır. Yine de, şu an için en uygun çözüm olduğunu düşünüyorum, bu yüzden yanıtladığınız için teşekkürler! – dhar

+0

Herhangi bir javascript dosyası, './App/my-worker-file.js' gibi kendiliğinden duran bir dosya kullanıldığında, dosya dizinine dosya göndermek için' CopyWebpackPlugin' kullanılarak sorun yoktur. Ancak bir paket kullanmıyorsanız, o zaman çalışanınızın bağımlılıklarına bağımlılık yapma yeteneğini kaybedersiniz. –

+1

Bu arada - webpack yapılandırması ile kaynak arasında bir bağımlılık olmaması, tam olarak 'işçi-yükleyicinin' size verdiği şeydir. Kaynak kodunuza açık bir şekilde '(' worker! .... ') 'yazmayı istemiyorsanız (web pakette açık bir bağımlılığı önlemek için), webpack'i çalışan yükleyiciyi kullanacak şekilde yapılandırabilirsiniz: modül: {loaders: [{test: /\.worker.js$/, yükleyici: 'worker'}]} ' –