2016-10-10 71 views
3

我書面方式,我需要幾個js文件,CONCAT他們,再壓縮這些一飲而盡任務..同樣與SCSS到CSS等..正常的東西爲什麼gulp抱怨超過最大調用堆棧大小?

而且,它是爲Drupal 8

這裏我的大文件。但是在運行此,我一直收到以下錯誤:

[10:00:58] Starting 'scripts'... 

events.js:160 
     throw er; // Unhandled 'error' event 
    ^
RangeError: Maximum call stack size exceeded 
    at Object.TreeWalker._visit (eval at <anonymous> (/Applications/MAMP/htdocs/novaent/node_modules/uglify-js/tools/node.js:1:0), <anonymous>:1255:21) 
'use strict'; 

而下面是我一飲而盡文件

// Include gulp. 
var gulp = require('gulp'); 
var browserSync = require('browser-sync').create(); 
var config = require('./config.json'); 

// Include plugins. 
var sass = require('gulp-sass'); 
var imagemin = require('gulp-imagemin'); 
var pngcrush = require('imagemin-pngcrush'); 
var shell = require('gulp-shell'); 
var plumber = require('gulp-plumber'); 
var notify = require('gulp-notify'); 
var autoprefix = require('gulp-autoprefixer'); 
var glob = require('gulp-sass-glob'); 
var uglify = require('gulp-uglify'); 
var concat = require('gulp-concat'); 
var rename = require('gulp-rename'); 
var sourcemaps = require('gulp-sourcemaps'); 


// sassOptions are optional but things like sourceComments (line_comments) can be pretty handy. 
var sassOptions = { 
    errLogToConsole: true, 
    outputStyle: 'compressed', 
    sourceComments: 'line_comments', 
    includePaths: config.css.includePaths 
}; 


// CSS. 
gulp.task('css', function() { 
    return gulp.src(config.css.src) 
    .pipe(glob()) 
    .pipe(plumber({ 
     errorHandler: function (error) { 
     notify.onError({ 
      title: 'Gulp', 
      subtitle: 'Failure!', 
      message: 'Error: <%= error.message %>', 
      sound: 'Beep' 
     })(error); 
     this.emit('end'); 
     }})) 
    .pipe(sourcemaps.init()) 
    .pipe(sass(sassOptions).on('error', sass.logError)) 
    .pipe(autoprefix('last 2 versions', '> 1%', 'ie 9', 'ie 10')) 
    .pipe(sourcemaps.write('./maps')) 
    .pipe(gulp.dest(config.css.dest)) 
    .pipe(browserSync.reload({stream: true, injectChanges: true, match: '**/*.css'})); 
}); 

// Compress images. 
gulp.task('images', function() { 
    return gulp.src(config.images.src) 
    .pipe(imagemin({ 
     progressive: true, 
     svgoPlugins: [{removeViewBox: false}], 
     use: [pngcrush()] 
    })) 
    .pipe(gulp.dest(config.images.dest)); 
}); 

// Fonts. 
gulp.task('fonts', function() { 
    return gulp.src(config.fonts.src) 
    .pipe(gulp.dest(config.fonts.dest)); 
}); 

// javaScripts 
gulp.task('scripts', function() { 
    return gulp.src(config.js.src) 
    .pipe(concat('index.js')) 
    .pipe(gulp.dest(config.js.dest)) // outputs *.js without min 
    .pipe(rename({suffix: '.min'})) 
    .pipe(uglify()) 
    .pipe(gulp.dest(config.js.dest)) // outputs *.js.min 
    .pipe(notify({message: 'Rebuild all custom scripts'})); 
}); 

// Watch task. 
gulp.task('watch', function() { 
    gulp.watch(config.css.src, ['css']); 
    gulp.watch(config.fonts.src, ['fonts']); 
    gulp.watch(config.js.src, ['scripts']); 
    gulp.watch(config.images.src, ['images']); 
}); 

// Static Server + Watch 
gulp.task('serve', ['css', 'fonts', 'watch'], function() { 
    browserSync.init({ 
    proxy: config.proxy 
    }); 
}); 

// Run drush to clear the theme registry. 
gulp.task('drush', shell.task([ 
    'drush cache-clear theme-registry' 
])); 

// Default Task 
gulp.task('default', ['serve']); 
+0

您已經把它變成無限遞歸的電話。不過,不知道爲什麼。 – vlaz

+0

是的,RangeError:超過最大調用堆棧大小可能表明對js進行遞歸調用。但它不應該是正確的? –

+0

你會這麼想,但是'uglify'就是那裏。不知道爲什麼。你是否應該傳遞一些信息給電話?從來沒有這樣做過,所以我不確定。 – vlaz

回答

0

我想我已經解決了它,如下

'use strict'; 

// Include gulp. 
var gulp = require('gulp'); 
var browserSync = require('browser-sync').create(); 
var config = require('./config.json'); 

// Include plugins. 
var sass = require('gulp-sass'); 
var imagemin = require('gulp-imagemin'); 
var pngcrush = require('imagemin-pngcrush'); 
var shell = require('gulp-shell'); 
var plumber = require('gulp-plumber'); 
var notify = require('gulp-notify'); 
var autoprefix = require('gulp-autoprefixer'); 
var glob = require('gulp-sass-glob'); 
var uglify = require('gulp-uglify'); 
var concat = require('gulp-concat'); 
var rename = require('gulp-rename'); 
var sourcemaps = require('gulp-sourcemaps'); 


var sassOptions = { 
    errLogToConsole: true, 
    outputStyle: 'compressed', 
    sourceComments: 'line_comments', 
    includePaths: config.css.includePaths 
}; 


var uglifyOptions = { 
    preserveComments: 'license', 
    warnings: 'true' 
}; 

// CSS. 
gulp.task('css', function() { 
    return gulp.src(config.css.src) 
    .pipe(glob()) 
    .pipe(plumber({ 
     errorHandler: function (error) { 
     notify.onError({ 
      title: 'Gulp', 
      subtitle: 'Failure!', 
      message: 'Error: <%= error.message %>', 
      sound: 'Beep' 
     })(error); 
     this.emit('end'); 
     }})) 
    .pipe(sourcemaps.init()) 
    .pipe(sass(sassOptions).on('error', sass.logError)) 
    .pipe(autoprefix('last 2 versions', '> 1%', 'ie 9', 'ie 10')) 
    .pipe(sourcemaps.write('./maps')) 
    .pipe(gulp.dest(config.css.dest)) 
    .pipe(browserSync.reload({stream: true, injectChanges: true, match: '**/*.css'})); 
}); 

// Compress images. 
gulp.task('images', function() { 
    return gulp.src(config.images.src) 
    .pipe(imagemin({ 
     progressive: true, 
     svgoPlugins: [{removeViewBox: false}], 
     use: [pngcrush()] 
    })) 
    .pipe(gulp.dest(config.images.dest)); 
}); 

// Fonts. 
gulp.task('fonts', function() { 
    return gulp.src(config.fonts.src) 
    .pipe(gulp.dest(config.fonts.dest)); 
}); 


// Concat all js files into one index.min.js file 
gulp.task('scripts', function() { 
    return gulp.src(config.js.src) 
    .pipe(concat('./js/index.js')) 
    .pipe(gulp.dest('./js/')) 
    .pipe(rename({suffix: '.min'})) 
    .pipe(uglify(uglifyOptions)) 
    .pipe(gulp.dest('./assets/dist/')) 
    .pipe(notify({message: 'Rebuild all custom scripts. Please refresh your browser'})); 
}); 

// Watch task. 
gulp.task('watch', function() { 
    gulp.watch(config.css.src, ['css']); 
    gulp.watch(config.fonts.src, ['fonts']); 
    gulp.watch(config.js.src, ['scripts']); 
    gulp.watch(config.images.src, ['images']); 
}); 

// Static Server + Watch 
gulp.task('serve', ['css', 'fonts', 'scripts', 'watch'], function() { 
    browserSync.init({ 
    proxy: config.proxy 
    }); 
}); 

// Run drush to clear the theme registry. 
gulp.task('drush', shell.task([ 
    'drush cache-clear theme-registry' 
])); 

// Default Task 
gulp.task('default', ['serve']); 
+4

這不是有用的,除非你解釋你到底發生了什麼變化以及它爲什麼會引起問題。 – zerkms

+0

其實我在上面的評論中寫過。 \t 我想我已經解決了它。 uglify縮小文件位於自定義js文件所在的同一文件夾中。我要求檢查相同的文件夾,concat + minify並將其轉儲到同一個文件夾中。它聽起來像遞歸到我:) –

相關問題