Gulp-Change давая TypeError | Реагировать приложение

Я следую довольно простому руководству по реакции, чтобы познакомиться с его функционированием. Так что прости меня, если я пропустил что-то очевидное. Частью начала урока была настройка gulp для обработки sass-файлов. Поэтому я настроил свой файл gulp, настроил свои зависимости и попытался сохранить свой файл scss, к сожалению, я получил TypeError ошибка и потратил около часа или около того, пытаясь преодолеть это самостоятельно, но не смог найти ничего конкретного.

У меня проблема с глотком. Я прошёл строку за строкой и убедился, что это была строка, вызывающая TypeError вопрос. gulpfile.js

'use strict';

var gulp = require('gulp');
var sass = require('gulp-sass');
var minifyCSS = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var changed = require('gulp-change');

/////////////////
// - SCSS / CSS
/////////////////

var SCSS_SRC = './src/Assets/scss/**/*.scss';
var SCSS_DEST = './src/Assets/css';

gulp.task('compile_scss', function(){
    gulp.src(SCSS_SRC)
    .pipe(sass().on('error', sass.logError))
    .pipe(minifyCSS())
    .pipe(rename({ suffix: '.min' }))

    ////////////line creating the error//////////////
    .pipe(changed(SCSS_DEST))        
    .pipe(gulp.dest(SCSS_DEST));
});

//detect changes in SCSS
gulp.task('watch_scss', function(){
    gulp.watch(SCSS_SRC, ['compile_scss']);
});

//run tasks
gulp.task('default', ['watch_scss']);

Ошибка дана

internal/streams/legacy.js:59
      throw er; // Unhandled stream error in pipe.

TypeError: run.call is not a function
    at R:\Documents\Projects\React Goal App\goal-app\node_modules\gulp-change\index.js:31:14
    at wrappedMapper (R:\Documents\Projects\React Goal App\goal-app\node_modules\map-stream\index.js:84:19)
    at Stream.stream.write (R:\Documents\Projects\React Goal App\goal-app\node_modules\map-stream\index.js:96:21)
    at Transform.ondata (_stream_readable.js:639:20)
    at emitOne (events.js:116:13)
    at Transform.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Transform.Readable.push (_stream_readable.js:208:10)
    at Transform.push (_stream_transform.js:147:32)

gulp-change index.js

var eventStream = require('event-stream');

module.exports = gulpChange;

function gulpChange(run) {
    return eventStream.map(function(file, done) {
        if (file.isNull()) {
            return done(null, file);
        }
        if (file.isStream()) {
            return done(new PluginError('gulp-change', 'Streaming not supported.'));
        }
        var content = file.contents.toString();
        var ctx = {
            file: file,
            fname: file.history[file.history.length - 1].substr(file.base.length),
            originalContent: content
        };

        function next(err, content) {
            if (err) {
                return done(err);
            }
            if (content) {
                file.contents = new Buffer(content);
            }
            done(null, file);
        }

        if (run.length > 1) {
////////////////line 31 where run is indicated as not a function/////////////
            run.call(ctx, content, next);
        } else {
            next(null, run.call(ctx, content))
        }
    });
}

файл default.scss, с которым я работаю

body{
    font-size: 10px;
}

Структура папок для scss / css

  • цель-приложение (root)
    • ЦСИ
      • активы
        • CSS
        • СКС
          • default.scss

1 ответ

Решение

Если я правильно понял ваш код, то параметр run метода gulpChange - это то же самое, что вы передаете измененному методу в .pipe(changed(SCSS_DEST)) линия. Это делает переменную запуска строкой.

String не является функцией, но имеет свойство length, поэтому if (run.length > 1) { строка не выдает ошибку и даже рассчитывается как истина.

Используемый пакет - gulp-change, а не gulp-change, как может показаться. В документации gulp-change говорится, что вы должны передать функцию в качестве параметра.

Другие вопросы по тегам