2014-04-28 5 views
1

Я использую gulpfile.js, сгенерированный генератором gulp-webapp yeoman, и слегка измененный мной для удовлетворения моих потребностей. По какой-то причине я все время сталкиваюсь с проблемой при попытке запустить процесс сборки (задача по умолчанию). Ошибка вызывается во время задачи «html», и большинство ссылок на ошибки находятся в `node_modules \ gulp-useref \ index.js '.Ошибка Gulp-useref: «путь должен быть строкой»

Вот выход ошибки:

stream.js:94 
    throw er; //Unhandled stream in pipe. 

TypeError: path must be a string 
    at Object.fs.openSync (fs.js:427:18) 
    at Object.fs.readFileSync (fs.js:284:15) 
    at Transform.<anonymous> (C:\dev\project\node_modules\gulp-useref\index.js:54:44) 
    at Array.forEach (native) 
    at Transform.<anonymous> (C:\dev\project\node_modules\gulp-useref\index.js:50:31) 
    at Array.forEach (native) 
    at Transform.<anonymous> (C:\dev\project\node_modules\gulp-useref\index.js:41:36) 
    at Array.forEach (native) 
    at Transform._transform (C:\dev\project\node_modules\gulp-useref\index.js:38:23) 
    at Transform._read (C:\dev\project\node_modules\gulp-useref\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:184:10) 
    at Transform._write (C:\dev\project\node_modules\gulp-useref\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:172:12) 

Вот HTML задача:

gulp.task('html', ['styles', 'scripts'], function() { 
    var jsFilter = $.filter('**/*.js'); 
    var cssFilter = $.filter('**/*.css'); 

    return gulp.src(['app/**/*.html','app/**/*.php']) 
     .pipe($.useref.assets()) 
     .pipe(jsFilter) 
     .pipe($.uglify()) 
     .pipe(jsFilter.restore()) 
     .pipe(cssFilter) 
     .pipe($.csso()) 
     .pipe(cssFilter.restore()) 
     .pipe($.useref.restore()) 
     .pipe($.useref()) 
     .pipe(gulp.dest('dist')) 
     .pipe($.size()); 
}); 

ответ

7

Короткий ответ: TypeError: path must be a string означает, что существует проблема с путями ссылки/скрипт. useref не может найти файл или каталог, на который вы указываете.

Длинный ответ:
Было два вопроса, с которыми я столкнулся.

  1. Пути ссылок/сценариев должны быть относительными к gulpfile или иметь альтернативный каталог для поиска.
<!-- build:css /styles/main.css --> 
<link href="app/styles/base.css"> 
<link href="app/styles/article.css"> 
<!-- endbuild --> 

ИЛИ

<!-- build:css(app) /styles/main.css --> 
<link href="/styles/base.css"> 
<link href="/styles/article.css"> 
<!-- endbuild --> 
  1. Йомен gulpfile использует несколько каталогов альт, который требует, чтобы поместить их в фигурные скобки, как это:
<!-- build:css({.temp,app}) /styles/main.css --> Works 

Но если вы есть только один каталог alt, и вы оставите его в t он фигурные скобки, это вызовет ошибку.

<!-- build:css({app}) /styles/main.css --> TypeError: path must be a string 

Это потому, что он читает путь, C:\path\to\project\{app}\styles\style.css. Мне это кажется странным поведением. Я бы подумал, что он будет перебирать каталоги, перечисленные в фигурных скобках, независимо от длины.

+0

Я искал SO и другие ресурсы некоторое время, ища ответ на этот вопрос. Спасибо за помощь! – NoR

Смежные вопросы