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 говорится, что вы должны передать функцию в качестве параметра.