2017-03-15 5 views
1

私は角度2を使用してアプリケーションを作成していますが、最近私のコードをSystemJSからWebpackに移行しました。Angular 2&Webpack:ほとんどのエラーはコンソールに記録されていません

私はWebpackに切り替えてから、角度で投げられたエラーがコンソールに記録されていないことに気付きました。

これを修正してエラーをコンソールに再度記録する方法を知っている人はいますか?

WebPACKの設定

/** 
* @author: @AngularClass 
*/ 

const helpers = require('./helpers'); 
const webpackMerge = require('webpack-merge'); // used to merge webpack configs 
const webpackMergeDll = webpackMerge.strategy({ plugins: 'replace' }); 
const commonConfig = require('./webpack.common.js'); // the settings that are common to prod and dev 

/** 
* Webpack Plugins 
*/ 
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin'); 
const DefinePlugin = require('webpack/lib/DefinePlugin'); 
const NamedModulesPlugin = require('webpack/lib/NamedModulesPlugin'); 
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); 

/** 
* Webpack Constants 
*/ 
const ENV = process.env.ENV = process.env.NODE_ENV = 'development'; 
const HOST = process.env.HOST || 'localhost'; 
const PORT = process.env.PORT || 3000; 
const HMR = helpers.hasProcessFlag('hot'); 
const METADATA = webpackMerge(commonConfig({ env: ENV }).metadata, { 
    host: HOST, 
    port: PORT, 
    ENV: ENV, 
    HMR: HMR 
}); 


const DllBundlesPlugin = require('webpack-dll-bundles-plugin').DllBundlesPlugin; 

/** 
* Webpack configuration 
* 
* See: http://webpack.github.io/docs/configuration.html#cli 
*/ 
module.exports = function (options) { 
    return webpackMerge(commonConfig({ env: ENV }), { 

    /** 
    * Developer tool to enhance debugging 
    * 
    * See: http://webpack.github.io/docs/configuration.html#devtool 
    * See: https://github.com/webpack/docs/wiki/build-performance#sourcemaps 
    */ 
    devtool: 'cheap-module-source-map', 

    /** 
    * Options affecting the output of the compilation. 
    * 
    * See: http://webpack.github.io/docs/configuration.html#output 
    */ 
    output: { 

     /** 
     * The output directory as absolute path (required). 
     * 
     * See: http://webpack.github.io/docs/configuration.html#output-path 
     */ 
     path: helpers.root('dist'), 

     /** 
     * Specifies the name of each output file on disk. 
     * IMPORTANT: You must not specify an absolute path here! 
     * 
     * See: http://webpack.github.io/docs/configuration.html#output-filename 
     */ 
     filename: '[name].bundle.js', 

     /** 
     * The filename of the SourceMaps for the JavaScript files. 
     * They are inside the output.path directory. 
     * 
     * See: http://webpack.github.io/docs/configuration.html#output-sourcemapfilename 
     */ 
     sourceMapFilename: '[file].map', 

     /** The filename of non-entry chunks as relative path 
     * inside the output.path directory. 
     * 
     * See: http://webpack.github.io/docs/configuration.html#output-chunkfilename 
     */ 
     chunkFilename: '[id].chunk.js', 

     library: 'ac_[name]', 
     libraryTarget: 'var', 
    }, 

    module: { 

     rules: [ 
     { 
      test: /\.ts$/, 
      use: [ 
      { 
       loader: 'tslint-loader', 
       options: { 
       configFile: 'tslint.json' 
       } 
      } 
      ], 
      exclude: [/\.(spec|e2e)\.ts$/] 
     }, 

     /* 
     * css loader support for *.css files (styles directory only) 
     * Loads external css styles into the DOM, supports HMR 
     * 
     */ 
     { 
      test: /\.css$/, 
      use: ['style-loader', 'css-loader'], 
      include: [helpers.root('src', 'styles')] 
     }, 

     /* 
     * sass loader support for *.scss files (styles directory only) 
     * Loads external sass styles into the DOM, supports HMR 
     * 
     */ 
     { 
      test: /\.scss$/, 
      use: ['style-loader', 'css-loader', 'sass-loader'], 
      include: [helpers.root('src', 'styles')] 
     }, 

     /** 
     * Script loader needed for Cesium imports 
     */ 
     { 
      test: /Cesium\.js$/, 
      use: [ 
      { 
       loader: 'script-loader' 
      } 
      ] 
     }, 

     /** 
     * Script loader needed for roslib imports 
     */ 
     { 
      test: /roslib\.js$/, 
      use: [ 'script-loader' ] 
     }, 

     ] 

    }, 

    plugins: [ 

     /** 
     * Plugin: DefinePlugin 
     * Description: Define free variables. 
     * Useful for having development builds with debug logging or adding global constants. 
     * 
     * Environment helpers 
     * 
     * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin 
     */ 
     // NOTE: when adding more properties, make sure you include them in custom-typings.d.ts 
     new DefinePlugin({ 
     'ENV': JSON.stringify(METADATA.ENV), 
     'HMR': METADATA.HMR, 
     'process.env': { 
      'ENV': JSON.stringify(METADATA.ENV), 
      'NODE_ENV': JSON.stringify(METADATA.ENV), 
      'HMR': METADATA.HMR, 
     } 
     }), 

     new DllBundlesPlugin({ 
     bundles: { 
      polyfills: [ 
      'core-js', 
      { 
       name: 'zone.js', 
       path: 'zone.js/dist/zone.js' 
      }, 
      { 
       name: 'zone.js', 
       path: 'zone.js/dist/long-stack-trace-zone.js' 
      }, 
      ], 
      vendor: [ 
      '@angular/platform-browser', 
      '@angular/platform-browser-dynamic', 
      '@angular/core', 
      '@angular/common', 
      '@angular/forms', 
      '@angular/http', 
      '@angular/router', 
      '@angularclass/hmr', 
      'rxjs', 
      'roslib', 
      'cesium', 
      'eventemitter2' 
      ] 
     }, 
     dllDir: helpers.root('dll'), 
     webpackConfig: webpackMergeDll(commonConfig({ env: ENV }), { 
      devtool: 'cheap-module-source-map', 
      plugins: [] 
     }) 
     }), 

     /** 
     * Plugin: AddAssetHtmlPlugin 
     * Description: Adds the given JS or CSS file to the files 
     * Webpack knows about, and put it into the list of assets 
     * html-webpack-plugin injects into the generated html. 
     * 
     * See: https://github.com/SimenB/add-asset-html-webpack-plugin 
     */ 
     new AddAssetHtmlPlugin([ 
     { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('polyfills')}`) }, 
     { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('vendor')}`) } 
     ]), 

     /** 
     * Plugin: NamedModulesPlugin (experimental) 
     * Description: Uses file names as module name. 
     * 
     * See: https://github.com/webpack/webpack/commit/a04ffb928365b19feb75087c63f13cadfc08e1eb 
     */ 
     // new NamedModulesPlugin(), 

     /** 
     * Plugin LoaderOptionsPlugin (experimental) 
     * 
     * See: https://gist.github.com/sokra/27b24881210b56bbaff7 
     */ 
     new LoaderOptionsPlugin({ 
     debug: true, 
     options: { 

     } 
     }), 

    ], 

    /** 
    * Webpack Development Server configuration 
    * Description: The webpack-dev-server is a little node.js Express server. 
    * The server emits information about the compilation state to the client, 
    * which reacts to those events. 
    * 
    * See: https://webpack.github.io/docs/webpack-dev-server.html 
    */ 
    devServer: { 
     port: METADATA.port, 
     host: METADATA.host, 
     historyApiFallback: true, 
     watchOptions: { 
     aggregateTimeout: 300, 
     poll: 1000 
     } 
    }, 

    /* 
    * Include polyfills or mocks for various node stuff 
    * Description: Node configuration 
    * 
    * See: https://webpack.github.io/docs/configuration.html#node 
    */ 
    node: { 
     global: true, 
     crypto: 'empty', 
     process: true, 
     module: false, 
     clearImmediate: false, 
     setImmediate: false 
    } 

    }); 
} 

もっとWebPACKのコンフィグ

/** 
* @author: @AngularClass 
*/ 

const webpack = require('webpack'); 
const helpers = require('./helpers'); 

/* 
* Webpack Plugins 
*/ 
// problem with copy-webpack-plugin 
const AssetsPlugin = require('assets-webpack-plugin'); 
const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin'); 
const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin'); 
const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin'); 
const CopyWebpackPlugin = require('copy-webpack-plugin'); 
const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin; 
const HtmlElementsPlugin = require('./html-elements-plugin'); 
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); 
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); 
const ngcWebpack = require('ngc-webpack'); 

/* 
* Webpack Constants 
*/ 
const HMR = helpers.hasProcessFlag('hot'); 
const AOT = helpers.hasNpmFlag('aot'); 
const METADATA = { 
    title: '', 
    baseUrl: '/', 
    isDevServer: helpers.isWebpackDevServer() 
}; 

/* 
* Webpack configuration 
* 
* See: http://webpack.github.io/docs/configuration.html#cli 
*/ 
module.exports = function (options) { 
    isProd = options.env === 'production'; 
    return { 

    /* 
    * Cache generated modules and chunks to improve performance for multiple incremental builds. 
    * This is enabled by default in watch mode. 
    * You can pass false to disable it. 
    * 
    * See: http://webpack.github.io/docs/configuration.html#cache 
    */ 
    //cache: false, 

    /* 
    * The entry point for the bundle 
    * Our Angular.js app 
    * 
    * See: http://webpack.github.io/docs/configuration.html#entry 
    */ 
    entry: { 

     'polyfills': './src/polyfills.browser.ts', 
     'main':  AOT ? './src/main.browser.aot.ts' : 
        './src/main.browser.ts' 

    }, 

    /* 
    * Options affecting the resolving of modules. 
    * 
    * See: http://webpack.github.io/docs/configuration.html#resolve 
    */ 
    resolve: { 

     /* 
     * An array of extensions that should be used to resolve modules. 
     * 
     * See: http://webpack.github.io/docs/configuration.html#resolve-extensions 
     */ 
     extensions: ['.ts', '.js', '.json'], 

     // An array of directory names to be resolved to the current directory 
     modules: [helpers.root('src'), helpers.root('node_modules')], 

    }, 

    /* 
    * Options affecting the normal modules. 
    * 
    * See: http://webpack.github.io/docs/configuration.html#module 
    */ 
    module: { 

     rules: [ 

     /* 
     * Typescript loader support for .ts 
     * 
     * Component Template/Style integration using `angular2-template-loader` 
     * Angular 2 lazy loading (async routes) via `ng-router-loader` 
     * 
     * `ng-router-loader` expects vanilla JavaScript code, not TypeScript code. This is why the 
     * order of the loader matter. 
     * 
     * See: https://github.com/s-panferov/awesome-typescript-loader 
     * See: https://github.com/TheLarkInn/angular2-template-loader 
     * See: https://github.com/shlomiassaf/ng-router-loader 
     */ 
     { 
      test: /\.ts$/, 
      use: [ 
      { 
       loader: '@angularclass/hmr-loader', 
       options: { 
       pretty: !isProd, 
       prod: isProd 
       } 
      }, 
      { // MAKE SURE TO CHAIN VANILLA JS CODE, I.E. TS COMPILATION OUTPUT. 
       loader: 'ng-router-loader', 
       options: { 
       loader: 'async-import', 
       genDir: 'compiled', 
       aot: AOT 
       } 
      }, 
      { 
       loader: 'awesome-typescript-loader', 
       options: { 
       configFileName: 'tsconfig.webpack.json' 
       } 
      }, 
      { 
       loader: 'angular2-template-loader' 
      } 
      ], 
      exclude: [/\.(spec|e2e)\.ts$/] 
     }, 

     /* 
     * Json loader support for *.json files. 
     * 
     * See: https://github.com/webpack/json-loader 
     */ 
     { 
      test: /\.json$/, 
      use: 'json-loader' 
     }, 

     /* 
     * to string and css loader support for *.css files (from Angular components) 
     * Returns file content as string 
     * 
     */ 
     { 
      test: /\.css$/, 
      use: ['to-string-loader', 'css-loader'], 
      exclude: [helpers.root('src', 'styles')] 
     }, 

     /* 
     * to string and sass loader support for *.scss files (from Angular components) 
     * Returns compiled css content as string 
     * 
     */ 
     { 
      test: /\.scss$/, 
      use: ['to-string-loader', 'css-loader', 'sass-loader'], 
      exclude: [helpers.root('src', 'styles')] 
     }, 

     /* Raw loader support for *.html 
     * Returns file content as string 
     * 
     * See: https://github.com/webpack/raw-loader 
     */ 
     { 
      test: /\.html$/, 
      use: 'raw-loader', 
      exclude: [helpers.root('src/index.html')] 
     }, 

     /* 
     * File loader for supporting images, for example, in CSS files. 
     */ 
     { 
      test: /\.(jpg|png|gif)$/, 
      use: 'file-loader' 
     }, 

     /* File loader for supporting fonts, for example, in CSS files. 
     */ 
     { 
      test: /\.(eot|woff2?|svg|ttf)([\?]?.*)$/, 
      use: 'file-loader' 
     } 

     ], 

    }, 

    /* 
    * Add additional plugins to the compiler. 
    * 
    * See: http://webpack.github.io/docs/configuration.html#plugins 
    */ 
    plugins: [ 
     new AssetsPlugin({ 
     path: helpers.root('dist'), 
     filename: 'webpack-assets.json', 
     prettyPrint: true 
     }), 

     /* 
     * Plugin: ForkCheckerPlugin 
     * Description: Do type checking in a separate process, so webpack don't need to wait. 
     * 
     * See: https://github.com/s-panferov/awesome-typescript-loader#forkchecker-boolean-defaultfalse 
     */ 
     new CheckerPlugin(), 
     /* 
     * Plugin: CommonsChunkPlugin 
     * Description: Shares common code between the pages. 
     * It identifies common modules and put them into a commons chunk. 
     * 
     * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin 
     * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app 
     */ 
     new CommonsChunkPlugin({ 
     name: 'polyfills', 
     chunks: ['polyfills'] 
     }), 
     // This enables tree shaking of the vendor modules 
     new CommonsChunkPlugin({ 
     name: 'vendor', 
     chunks: ['main'], 
     minChunks: module => /node_modules/.test(module.resource) 
     }), 
     // Specify the correct order the scripts will be injected in 
     new CommonsChunkPlugin({ 
     name: ['polyfills', 'vendor'].reverse() 
     }), 

     /** 
     * Plugin: ContextReplacementPlugin 
     * Description: Provides context to Angular's use of System.import 
     * 
     * See: https://webpack.github.io/docs/list-of-plugins.html#contextreplacementplugin 
     * See: https://github.com/angular/angular/issues/11580 
     */ 
     new ContextReplacementPlugin(
     // The (\\|\/) piece accounts for path separators in *nix and Windows 
     /angular(\\|\/)core(\\|\/)src(\\|\/)linker/, 
     helpers.root('src'), // location of your src 
     { 
      // your Angular Async Route paths relative to this root directory 
     } 
    ), 

     /* 
     * Plugin: CopyWebpackPlugin 
     * Description: Copy files and directories in webpack. 
     * 
     * Copies project static assets. 
     * 
     * See: https://www.npmjs.com/package/copy-webpack-plugin 
     */ 
     new CopyWebpackPlugin([ 
     { from: 'src/assets', to: 'assets' }, 
     { from: 'src/meta'} 
     ]), 


     /* 
     * Plugin: HtmlWebpackPlugin 
     * Description: Simplifies creation of HTML files to serve your webpack bundles. 
     * This is especially useful for webpack bundles that include a hash in the filename 
     * which changes every compilation. 
     * 
     * See: https://github.com/ampedandwired/html-webpack-plugin 
     */ 
     new HtmlWebpackPlugin({ 
     template: 'src/index.html', 
     title: METADATA.title, 
     chunksSortMode: 'dependency', 
     metadata: METADATA, 
     inject: 'head' 
     }), 

     /* 
     * Plugin: ScriptExtHtmlWebpackPlugin 
     * Description: Enhances html-webpack-plugin functionality 
     * with different deployment options for your scripts including: 
     * 
     * See: https://github.com/numical/script-ext-html-webpack-plugin 
     */ 
     new ScriptExtHtmlWebpackPlugin({ 
     defaultAttribute: 'defer' 
     }), 

     /* 
     * Plugin: HtmlElementsPlugin 
     * Description: Generate html tags based on javascript maps. 
     * 
     * If a publicPath is set in the webpack output configuration, it will be automatically added to 
     * href attributes, you can disable that by adding a "=href": false property. 
     * You can also enable it to other attribute by settings "=attName": true. 
     * 
     * The configuration supplied is map between a location (key) and an element definition object (value) 
     * The location (key) is then exported to the template under then htmlElements property in webpack configuration. 
     * 
     * Example: 
     * Adding this plugin configuration 
     * new HtmlElementsPlugin({ 
     * headTags: { ... } 
     * }) 
     * 
     * Means we can use it in the template like this: 
     * <%= webpackConfig.htmlElements.headTags %> 
     * 
     * Dependencies: HtmlWebpackPlugin 
     */ 
     new HtmlElementsPlugin({ 
     headTags: require('./head-config.common') 
     }), 

     /** 
     * Plugin LoaderOptionsPlugin (experimental) 
     * 
     * See: https://gist.github.com/sokra/27b24881210b56bbaff7 
     */ 
     new LoaderOptionsPlugin({}), 

     // Fix Angular 2 
     new NormalModuleReplacementPlugin(
     /facade(\\|\/)async/, 
     helpers.root('node_modules/@angular/core/src/facade/async.js') 
    ), 
     new NormalModuleReplacementPlugin(
     /facade(\\|\/)collection/, 
     helpers.root('node_modules/@angular/core/src/facade/collection.js') 
    ), 
     new NormalModuleReplacementPlugin(
     /facade(\\|\/)errors/, 
     helpers.root('node_modules/@angular/core/src/facade/errors.js') 
    ), 
     new NormalModuleReplacementPlugin(
     /facade(\\|\/)lang/, 
     helpers.root('node_modules/@angular/core/src/facade/lang.js') 
    ), 
     new NormalModuleReplacementPlugin(
     /facade(\\|\/)math/, 
     helpers.root('node_modules/@angular/core/src/facade/math.js') 
    ), 

     new ngcWebpack.NgcWebpackPlugin({ 
     disabled: !AOT, 
     tsConfig: helpers.root('tsconfig.webpack.json'), 
     resourceOverride: helpers.root('config/resource-override.js') 
     }) 

    ], 

    /* 
    * Include polyfills or mocks for various node stuff 
    * Description: Node configuration 
    * 
    * See: https://webpack.github.io/docs/configuration.html#node 
    */ 
    node: { 
     global: true, 
     crypto: 'empty', 
     process: true, 
     module: false, 
     clearImmediate: false, 
     setImmediate: false 
    } 

    }; 
} 

App.module.ts

// Angular 2 imports 
import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { MaterialModule } from '@angular/material'; 

import { AppComponent } from './app.component'; 

import { ROUTING } from './app.routing'; 

@NgModule({ 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    ROUTING, 
    HttpModule, 
    ReactiveFormsModule, 
    MaterialModule.forRoot(), 
    ], 
    declarations: [ 
    AppComponent 
    ], 
    providers: [ ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 
+0

アプリケーションをどこにブートストラップすることができますか?私はAppModuleだけをここで見ることができます。 –

+0

自分のQで答えただけです(下記の回答を参照)。ありがとう! – HNipps

答えて

1

I自分自身で答えを見つけました。

角度エラーハンドラは既に予想されていたが致命的なエラーではないエラーを投げていたため、エラーハンドラがコンソールに他のものを記録できなくなったようです。

最初のエラーを修正した後、私のアプリケーションは他のエラーを記録し始めました。

レッスンが学んだ!

関連する問題