使用WebPack在Web worker中运行Angular 2应用程序

前端之家收集整理的这篇文章主要介绍了使用WebPack在Web worker中运行Angular 2应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将Angular 2应用程序的整个执行移动到Web工作者,但我发现现在所有可用的示例都使用System.js,而我正在尝试使用基于WebPack的项目(用angular-cli构建).

有没有人这样做过或者对如何使用WebPack有所了解?

下面是我的main.ts引导程序文件

  1. import './polyfills.ts';
  2.  
  3.  
  4. import { enableProdMode } from '@angular/core';
  5. import { environment } from './environments/environment';
  6.  
  7.  
  8. if (environment.production) {
  9. enableProdMode();
  10. }
  11.  
  12. import {bootstrapWorkerUi} from '@angular/platform-webworker';
  13. bootstrapWorkerUi('/app/loader.js');

我的loader.js看起来像这样:

  1. import {platformWorkerAppDynamic} from '@angular/platform-webworker-dynamic';
  2. import { AppModule } from './app/';
  3.  
  4. platformWorkerAppDynamic().bootstrapModule(AppModule);

我的app.module.tsis以这种方式声明@NgModulet:

  1. import { NgModule } from '@angular/core';
  2. import {WorkerAppModule} from '@angular/platform-webworker';
  3.  
  4.  
  5. import { AppComponent } from './app.component';
  6.  
  7. @NgModule({
  8. declarations: [
  9. AppComponent
  10. ],imports: [
  11. WorkerAppModule
  12. ],providers: [],bootstrap: [AppComponent]
  13. })
  14. export class AppModule { }

但是,当我运行它时,我收到错误Uncaught SyntaxError:loader.js中的意外令牌导入:1.

根据Tamas Gegedus和MathMate的建议,这个问题似乎与webpack和webworker方面缺少@angular libs的导入有关,所以下一步是修改webpack配置文件,以便为webworker提供所有必需的libs .我会继续努力.

———–
UPDATE
———–

由于angular-cli不提供对webpack.config.js文件的访问,因此我已经包含了我的文件,对代码进行了少量更改,因此它可以正常工作.我在webpack配置文件中创建了第二个入口点,我收到错误VM33:106 Uncaught ReferenceError:窗口未定义.

Webpack配置文件如下所示:

  1. var ExtractTextPlugin = require('extract-text-webpack-plugin');
  2. var HtmlWebpackPlugin = require('html-webpack-plugin');
  3. var helpers = require('./config/helpers');
  4.  
  5.  
  6. module.exports = {
  7. entry: {
  8. 'app': ['./src/polyfills.ts','./src/vendor.ts','./src/main.ts'],'webworker': ['./src/workerLoader.ts']
  9. },resolve: {
  10. extensions: ['','.ts','.js']
  11. },output: {
  12. path: helpers.root('dist'),publicPath: 'http://localhost:8080/',filename: '[name].js'
  13. },devtool: 'cheap-module-eval-source-map',module: {
  14. loaders: [
  15. {
  16. test: /\.ts$/,loaders: ['awesome-typescript-loader?tsconfig=./src/tsconfig.json','angular2-template-loader']
  17. },{
  18. test: /\.html$/,loader: 'html'
  19. },{
  20. test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,loader: 'file?name=assets/[name].[hash].[ext]'
  21. },{
  22. test: /\.css$/,exclude: helpers.root('src','app'),loader: ExtractTextPlugin.extract('style','css?sourceMap')
  23. },include: helpers.root('src',loader: 'raw'
  24. }
  25. ]
  26. },plugins: [
  27. new HtmlWebpackPlugin({
  28. template: 'src/index.html',excludeChunks: ['webworker']
  29. }),new ExtractTextPlugin('[name].css')
  30. ]
  31. };

其中polyfills.ts和vendor.ts分别包含polyfill和angular libs.

我创建了2个入口点,生成2个输出(app.js和webworker.js).

使用HtmlWebpackPlugin,第一个包含在index.html文件中,但不包含在第二个文件中.

当包含index.html时,调用main.ts(包含在app.js中)并尝试使用webpack的第二个输出(webworker.js)引导webworker:

  1. import {bootstrapWorkerUi} from '@angular/platform-webworker';
  2. bootstrapWorkerUi('../webworker.js');

webworker.js是由webpack使用workerLoader.ts条目生成的,就像之前的loader.js一样,但包括一些导入.

WorkerLoader.ts文件如下所示:

  1. import './polyfills.ts';
  2. import '@angular/core';
  3. import '@angular/common';
  4.  
  5. import {platformWorkerAppDynamic} from '@angular/platform-webworker-dynamic';
  6. import { AppModule } from './app/';
  7.  
  8. platformWorkerAppDynamic().bootstrapModule(AppModule);

我知道已经生成了Web worker,如下图所示,但是如图所示,我收到错误VM33:106 Uncaught ReferenceError:窗口未定义,除了从索引加载消息外没有显示任何内容. HTML.

另一方面,我认为webpack配置是可以的,因为如果在没有webworker模式下使用webpack运行应用程序,它可以正常工作.

现在我认为这个问题与webworker bootstrap有关,但我在这里很困惑.

任何帮助,将不胜感激

猜你在找的HTML相关文章