2017-02-27 8 views
2

jsファイルを醜くしようとしています。バンドルファイルをindex.htmlで使用します。私はエラー以下になる。

以下は私のgulpファイルです。

'use-strict' 
var gulp = require('gulp'); 
var uglify = require('gulp-uglify'); 
var concat = require('gulp-concat'); 
var exec = require('gulp-exec'); 
var ngAnnotate = require('gulp-ng-annotate'); 
const babel = require('gulp-babel'); 
var exec = require('child_process').exec; 
gulp.task('scripts', function() { 
return gulp.src(['vzrth.js','psrhs.js']) 
.pipe(ngAnnotate()) 
    .pipe(babel({ 
     presets: ['es2015'] 
    })) 
    .pipe(concat('bundle.js')) 
    .pipe(uglify().on('error', function (e) { 
     console.log(e); 
    })) 
    .pipe(gulp.dest('./client')); 
}); 
gulp.task('nodestart', function (cb) { 
    exec('node ./bin/www', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}) 
gulp.task('default', ['scripts', 'nodestart']); 

私が手にエラーがある:

reference error: Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.5.8/ $injector/modulerr?p0=e

+0

何のdepenデンションのアノテーションを使用していますか?あなたが暗黙の注釈を使用している場合、あなたのサービス名は、縮小中に名前が変更され、あなたのアプリを壊すでしょう。 – Und3rTow

+0

コントローラまたはディレクティブの1つの例を提供できますか? –

+0

私は以下を提供しました – user7353226

答えて

6

あなたは間違って行われた場合に依存性注入(DI)が壊れることを認識する必要があり、角度のファイルを縮小化する場合。

.controller('MyController', ['$scope', '$timeout', function ($scope, $timeout) { 
    $scope.title = 'Minify me'; 
}); 

なぜ第1の実施のブレーク:

.controller('MyController', function($scope, $timeout) { 
    $scope.title = 'Minify me'; 
}); 

これはDIと同じコントローラの縮小SAFE例である:

これはDIとコントローラの縮小UNSAFE例でありますときに?

あなたはjavascriptのファイルを縮小化すると機能のパラメータがそのように、これは縮小化した後、あなたのコントローラになり、より簡単なものに縮小されます: まず、安全でない例:

.controller('MyController', function(a, b) { 
    a.title = 'Minify me'; 
}); 

あなたが見ることができるように、$ $ に細分化されました。 は、実際にサービスがと定義されている場合を除いて、角度には何も意味しません。です。今、縮小化、安全な例

:この例では

.controller('MyController', ['$scope', '$timeout', function (a, b) { 
     a.title = 'Minify me'; 
    }); 

角度は、文字列リテラルが縮小されませんので、最初のパラメータは、実際に$スコープであることを知っています。

EDIT:あなたはこのようなコントローラまたはディレクティブを宣言すると

が(危険な縮小化):

.controller('MyController', controller); 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 

これはなるだろう(方法1):

.controller('MyController', controller); 
controller.$inject = ['$scope', '$timeout']; 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 

ORこれはなります(方法2)

.controller('MyController', ['$scope','$timeout', controller]); 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 
+0

'use strict'; '$ location'、 '$ stateParams'、 '$ log'、 'HeaderFactory'、 'UserDataService'、 ,関数($ location、$ window、$ stateParams、$ log、headerFactory、userDataService){ var vm = this; vm。プロフィール= []; //ユーザープロファイルの詳細の配列 関数init(){ }; init(); } ] ); – user7353226

+0

は私のコントローラコードのフォーマットです。 – user7353226

+0

あなたが提供したコントローラーは完全に安全に見えますが、別のコントローラーで間違いを犯さなかったのでしょうか? [Strict DI Mode](https://docs.angularjs.org/guide/production)を有効にしてみてください。 –

関連する問題