2016-04-14 15 views
7

Mam dziwny błąd, gdy próbuję wymagać pliku html. Kod, o którym mowa, to aplikacja AngularJs napisana maszynowo i przy użyciu pakietu internetowego.Uncaught TypeError: Nie można odczytać właściwości 'call' z undefined po odbudowaniu pakietu sieciowego CommonsChunkPlugin

app.directive.ts

// require('./app.scss'); 

// import AppController from './app.controller'; 

function AppDirective(): ng.IDirective { 
    return { 
    restrict: 'E', 
    scope: {}, 
    controllerAs: 'vm', 
    // controller: AppController, 
    controller:() => {}, 
    // template: require('./app.html') 
    template: '<div>this is a test</div>' 
    } 
} 

angular 
    .module('myApp') 
    .directive('appDirective', AppDirective); 

app.controller.ts

export default class AppController { 

    public static $inject = ['$scope']; 

    constructor(private $scope) { 

    } 
} 

app.html

<div> 
    THIS IS A TEST, REMAIN CALM 
</div> 

app.scss jest pusty.

Tak, jak to jest, komentarze włączone, ten kod buduje się bez błędów w pakiecie sieci Web i zostanie wdrożony za pomocą serwera deweloperskiego.

Podczas korzystania z serwera deweloperskiego Webpack, który pozwala na zmianę kodu podczas pracy serwera i ponowne ładowanie go na żywo, mogę odkomentować dowolne/wszystkie skomentowane linie i będzie działać poprawnie.

Jednakże, jeśli mogę wyłączyć serwer dev i odbudować, to nie daje ten błąd:

Uncaught TypeError: Cannot read property 'call' of undefined

Uncaught TypeError: Cannot read property 'call' of undefined__webpack_require__ @ bootstrap 9163605…:50 
webpackJsonp.152 @ app.ts:2__webpack_require__ @ bootstrap 9163605…:50 
webpackJsonp.153 @ main.browser.ts:1__webpack_require__ @ bootstrap 9163605…:50 
webpackJsonp.0 @ main.bundle.js:7__webpack_require__ @ bootstrap 9163605…:50 

webpackJsonpCallback @ bootstrap 9163605 ...: 21 (funkcja anonimowa) @ main.bundle.js: 1

nie na tej linii w WebPacka: boostrap plik:

modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 

Ten błąd występuje, podczas próby odkomentowania linii app.scss, linii kontrolera lub linii app.html. Dzieje się tak tylko po przebudowie, z pominięciem którejkolwiek linii lub wszystkich linii.

Używam WebPACK budować, a commonjs modułu załadunku w tsconfig, i mam następujące ładowarki WebPACK w webpack.config dla tych typów plików:

 { 
     test: /\.ts$/, 
     loader: 'awesome-typescript-loader', 
     exclude: [/\.(spec|e2e)\.ts$/] 
     }, 

     { 
     test: /\.scss$/, 
     loader: 'style-loader!css-loader!sass-loader' 
     }, 

     { 
     test: /\.html$/, 
     loader: 'raw-loader', 
     exclude: [helpers.root('src/index.html')] 
     }, 

Używam kątowe js i maszynopis przez chwilę, ale po raz pierwszy rozpoczynam mój własny projekt, a ja wciąż natknę się na webpack.

Jestem bardzo zdezorientowany, dlaczego ten kod zadziała, jeśli wstawię go, gdy jest uruchomiony, ale potem przestanie działać po przebudowie. Myślę, że ma to coś wspólnego z moją konfiguracją Webpack, ale nie jestem w stanie tego rozgryźć i utknąłem na tym przez jakiś czas. Każda pomoc będzie doceniona.

UPDATEZnalazłem przyczynę, ale nie rozwiązanie. Wydaje się być spowodowane przez CommonsChunkPlugin w moim WebPACK config:

new webpack.optimize.CommonsChunkPlugin({ 
     name: helpers.reverse(['polyfills', 'vendor', 'main']), 
     // minChunks: Infinity 
    }), 

Gdybym wyjąć wtyczkę znika błąd, ale nie mam już tej wtyczki.

UPDATE 2

Zmiana inicjalizacji Plugin ten rozwiązuje problem:

new webpack.optimize.CommonsChunkPlugin({ 
    names: ['polyfills', 'vendor', 'main'], 
    minChunks: 2 
}), 

Ale ja nadal nie rozumiem, dlaczego

+0

„będzie działać prawidłowo” można zdefiniować, co to znaczy? Co to jest wynik, gdy "działa poprawnie"? –

+0

teraz tylko pusta strona przedstawiająca: jedna ryba dwie ryby czerwone ryby niebieski ryb Loading ... To jest test, zachować spokój gdy nie jest to praca pokazuje {{dane }} Ładowanie ... Tak więc angularjs przestał działać w drugim przypadku – Kyle

+0

mógł być tak prosty jak nazwa -> nazwy, które były przyczyną problemu – Kyle

Odpowiedz

0

Publikowanie aktualizacji nr 2 jako odpowiedzi zgodnie z zaleceniem Zze.

Zmiana inicjalizacji wtyczki to rozwiązuje problem:

new webpack.optimize.CommonsChunkPlugin({ 
    names: ['polyfills', 'vendor', 'main'], 
    minChunks: 2 
}), 

Ale ja nadal nie rozumiem, dlaczego

0

Jeśli masz wiele plików WebPACK skompilowane załadowany na tej samej stronie będą nadpisywać się nawzajem. użyj opcji module.output.library, aby zdefiniować "przestrzeń nazw" dla swojej aplikacji.

+0

co masz na myśli przez wiele? – Muhaimin

Powiązane problemy