2016-10-10 74 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并将其转储到同一个文件夹中。它听起来像递归到我:) –

相关问题