【问题标题】:gulp-sourcemaps fails if target file gets too large如果目标文件太大,gulp-sourcemaps 会失败
【发布时间】:2018-06-11 21:22:40
【问题描述】:

在我的 gulpfile.js 中有这个:

// Sass configuration
var gulp = require('gulp'),
    sass = require('gulp-sass'),
    cleanCSS = require('gulp-clean-css'),
    sourcemaps = require('gulp-sourcemaps'),
    concat = require('gulp-concat'),
    plumber = require('gulp-plumber');
    autoprefixer = require('autoprefixer');
    postcss      = require('gulp-postcss');

function handleError(err) {
    console.log(err.toString());
    this.emit('end');
}

gulp.task('sass', function() {
gulp.src([
    'kraater-web/src/app/css/admin/vars.scss',
    'kraater-web/src/app/css/admin/*.scss'])
    .pipe(plumber())
    .pipe(sourcemaps.init())
    .pipe(concat('admin.scss'))
    .pipe(gulp.dest('kraater-web/src/app/css/'))
    .pipe(sass())
    .pipe(postcss([ autoprefixer() ]))
    .pipe(cleanCSS())
    .pipe(concat('admin.css'))
    .pipe(sourcemaps.write(''))
    .pipe(gulp.dest('kraater-web/src/app/css/'))
});

gulp.task('default', ['sass'], function() {
    gulp.watch('kraater-web/src/app/css/admin/*.scss', ['sass']).on('error', handleError);
})

我使用映射将我所有的 .scss 文件编译成一个大的 admin.css(虽然它甚至没有那么大),但是在某一时刻,当我向 scss 输入额外的参数时,gulp 文件失败并给我这个错误:

C:\wamp\www\site17\node_modules\source-map\lib\source-map-generator.js:289 
throw new Error('Invalid mapping: ' + JSON.stringify({
        ^

Error: Invalid mapping: {"generated":{"line":186,"column":9},"source":"admin.scss","original":{"line":381,"column":-6},"name":null}
    at SourceMapGenerator_validateMapping [as _validateMapping] (C:\wamp\www\site17\node_modules\source-map\lib\source-map-generator.js:289:13)
    at SourceMapGenerator_addMapping [as addMapping] (C:\wamp\www\site17\node_modules\source-map\lib\source-map-generator.js:101:12)
    at C:\wamp\www\site17\node_modules\source-map\lib\source-map-generator.js:72:17
    at Array.forEach (native)
    at SourceMapConsumer_eachMapping [as eachMapping] (C:\wamp\www\site17\node_modules\source-map\lib\source-map-consumer.js:155:14)
    at Function.SourceMapGenerator_fromSourceMap [as fromSourceMap] (C:\wamp\www\site17\node_modules\source-map\lib\source-map-generator.js:48:24)
    at applySourceMap (C:\wamp\www\site17\node_modules\vinyl-sourcemaps-apply\index.js:26:40)
    at filePush (C:\wamp\www\site17\node_modules\gulp-sass\index.js:105:9)
    at Object.callback (C:\wamp\www\site17\node_modules\gulp-sass\index.js:147:9)
    at options.success (C:\wamp\www\site17\node_modules\node-sass\lib\index.js:308:32)

Watching build tasks has finished.

我在 scss 中输入的新参数是有效的,因为如果我删除它之前的一些行,那么 gulp 会再次很好地编译。就好像scss映射内存满了还是怎么编译失败。

有人见过这样的东西吗?

【问题讨论】:

    标签: gulp maps source-maps gulp-sass gulp-sourcemaps


    【解决方案1】:

    处理大文件:将选项largeFile: true 传递给sourcemaps.init()

    Check out on NPM.

    // Sass configuration
    var gulp = require('gulp'),
        sass = require('gulp-sass'),
        cleanCSS = require('gulp-clean-css'),
        sourcemaps = require('gulp-sourcemaps'),
        concat = require('gulp-concat'),
        plumber = require('gulp-plumber');
        autoprefixer = require('autoprefixer');
        postcss      = require('gulp-postcss');
    
    function handleError(err) {
       console.log(err.toString());
       this.emit('end');
    }
    
    gulp.task('sass', function() {
    gulp.src([
        'kraater-web/src/app/css/admin/vars.scss',
        'kraater-web/src/app/css/admin/*.scss'])
        .pipe(plumber())
        .pipe(sourcemaps.init({largeFile: true}))
        .pipe(concat('admin.scss'))
        .pipe(gulp.dest('kraater-web/src/app/css/'))
        .pipe(sass())
        .pipe(postcss([ autoprefixer() ]))
        .pipe(cleanCSS())
        .pipe(concat('admin.css'))
        .pipe(sourcemaps.write(''))
        .pipe(gulp.dest('kraater-web/src/app/css/'))
    });
    
    
    gulp.task('default', ['sass'], function() {
    gulp.watch('kraater-web/src/app/css/admin/*.scss', ['sass']).on('error', handleError);
    

    【讨论】:

    • 谢谢,但由于某种原因它没有帮助。仍然给出同样的错误。我很困惑。
    • 请查看this issue issuethis issue。看起来 sourcemap 有时与 & 符号有某种问题。
    【解决方案2】:

    通过将 gulp-sass 回滚到旧版本来修复它。我只是跑了。

    npm install gulp-sass@2.3.2
    

    在cmd中又开始编译了。

    此修复的原始发布者是用户 araphiel,来自此线程: https://github.com/nodejs/help/issues/429

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2020-05-14
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多