2017-01-02 4 views
2

Я новичок в системе Gulp, и я пытаюсь запустить приложение AngularJS. Используя Yeoman, я получил стандартный набор задач gulp, но один из них не работает с сообщением об ошибке. Я сузил его до определенной строки, но я недостаточно знаю об этой системе, чтобы узнать, что происходит с ошибкой или почему (кроме имени недостающего файла, конечно).Файл не найден с уникальным glob для временного файла

глоток файл, который неудача следующим образом:

const gulp = require('gulp'); 
const filter = require('gulp-filter'); 
const useref = require('gulp-useref'); 
const lazypipe = require('lazypipe'); 
const rev = require('gulp-rev'); 
const revReplace = require('gulp-rev-replace'); 
const uglify = require('gulp-uglify'); 
const cssnano = require('gulp-cssnano'); 
const htmlmin = require('gulp-htmlmin'); 
const sourcemaps = require('gulp-sourcemaps'); 
const uglifySaveLicense = require('uglify-save-license'); 
const ngAnnotate = require('gulp-ng-annotate'); 

const conf = require('../conf/gulp.conf'); 

gulp.task('build', build); 

function build() { 
    const htmlFilter = filter(conf.path.tmp('*.html'), {restore: true}); 
    const jsFilter = filter(conf.path.tmp('**/*.js'), {restore: true}); 
    const cssFilter = filter(conf.path.tmp('**/*.css'), {restore: true}); 

    return gulp.src(conf.path.tmp('/index.html')) 
    .pipe(useref({}, lazypipe().pipe(sourcemaps.init, {loadMaps: true}))) 
    // .pipe(jsFilter) 
    // .pipe(ngAnnotate()) 
    // .pipe(uglify({preserveComments: uglifySaveLicense})).on('error', conf.errorHandler('Uglify')) 
    // .pipe(rev()) 
    // .pipe(jsFilter.restore) 
    // .pipe(cssFilter) 
    // .pipe(cssnano()) 
    // .pipe(rev()) 
    // .pipe(cssFilter.restore) 
    // .pipe(revReplace()) 
    // .pipe(sourcemaps.write('maps')) 
    // .pipe(htmlFilter) 
    // .pipe(htmlmin()) 
    // .pipe(htmlFilter.restore) 
    // .pipe(gulp.dest(conf.path.dist())); 
} 

Как вы можете видеть, я комментировал все, кроме нарушившей линии. Эта линия, когда называется часть процесса сборки производит следующее сообщение об ошибке:

[17:22:27] 'build' errored after 42 ms 
[17:22:27] Error: Error: File not found with singular glob: C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\.tmp\jspm_packages\system.js 
at DestroyableTransform.<anonymous> (C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\node_modules\gulp-useref\index.js:65:28) 
at emitOne (events.js:101:20) 
at DestroyableTransform.emit (events.js:188:7) 
at emitOne (events.js:101:20) 
at Through2.emit (events.js:188:7) 
at OrderedStreams.<anonymous> (C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\node_modules\glob-stream\index.js:140:20) 
at emitOne (events.js:96:13) 
at OrderedStreams.emit (events.js:188:7) 
at emitOne (events.js:96:13) 
at DestroyableTransform.emit (events.js:188:7) 
at Glob.<anonymous> (C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\node_modules\glob-stream\index.js:40:16) 
at Glob.g (events.js:286:16) 
at emitOne (events.js:96:13) 
at Glob.emit (events.js:188:7) 
at Glob._finish (C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\node_modules\glob-stream\node_modules\glob\glob.js:172:8) 
at done (C:\Users\Jeffrey Getzin\Documents\GitHubVisualStudio\newclient\node_modules\glob-stream\node_modules\glob\glob.js:159:12) 
[17:22:27] 'build' errored after 25 s 
[17:22:27] 'default' errored after 25 s 
[17:22:27] 'serve:dist' errored after 25 s 

Process finished with exit code 1 

Очевидно, он ищет system.js в временной копии пакетов JSPM, но почему? И почему он не находит его? Должен ли файл быть там? Я не знаю, что пытается сделать скрипт gulp, поэтому я не мог не догадываться, почему он не работает.

Я знаю, что это, вероятно, недостаточно для получения исчерпывающего ответа, но я надеюсь, что здесь хватит на то, чтобы вы, по крайней мере, указали мне в правильном направлении.

Спасибо!

Update 1/3/2017

Я любопытный Сорт понял, что useref должен делать. Мой файл index.html является

<!doctype html> 
<html> 
    <head> 
    <base href="/"> 
    <meta charset="utf-8"> 
    <title>FountainJS</title> 
    <meta name="description" content=""> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link rel="icon" type="image/png" href="http://fountainjs.io/assets/imgs/fountain.png" /> 
    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
    <link rel="stylesheet" href="css/camera.css" type="text/css" media="screen"> 
    <link rel="stylesheet" href="css/style.css" type="text/css" media="screen"> 

    <!-- build:css(.tmp) index.css --> 
    <link rel="stylesheet" href="index.css"></link> 
    <!-- endbuild --> 
    </head> 

    <body class="front" ng-app="app"> 
    <div id="main"> 
     <ui-view></ui-view> 
     <page-footer></page-footer> 
    </div> 
    </body> 

    <!-- build:js(.tmp) index.js --> 
    <script src="jspm_packages/system.js"></script> 
    <script src="jspm.browser.js"></script> 
    <script src="jspm.config.js"></script> 

    <script> 
    System.import('src/index.ts'); 
    </script> 
    <!-- endbuild --> 
</html> 

То, что я думаю, что это должен произойти в том, что он должен заменить блок:

<!-- build:js(.tmp) index.js --> 
    <script src="jspm_packages/system.js"></script> 
    <script src="jspm.browser.js"></script> 
    <script src="jspm.config.js"></script> 

    <script> 
    System.import('src/index.ts'); 
    </script> 
    <!-- endbuild --> 

с

<script src="tmp/index.js"></script> 

ли это звук правильно ?

+0

Как выглядит ваша функция conf.path.tmp? –

ответ

2

Я действительно нашел решение, и это было совершенно не очевидно. Одна из проблем с Gulp, я узнал, состоит в том, что, разбивая все на небольшие проприетарные части, трудно увидеть общую картину. Это означает, что мне нужно было сделать глубокий дайвинг, чтобы узнать, что случилось.

Что было не так, было до на этапе useref. Это происходило, когда трубопровод делал <index.html>.pipe(replace(<pattern-describing-the-existing-javascript-includes>, '<script src="index.js">').

Я не помню точное регулярное выражение, которое пришло с проектом семян Yeoman, но было предвзято относительно того, как линии должны быть прекращены. Регулярное выражение было что-то вдоль линий:

/line1stuff\nline2stuff/ 

мне потребовалось много отладки, чтобы проследить его до этого момента, но я заметил, что регулярное выражение работает в regexpal, но когда я фактическая замену, ничего не было заменено ,

На наитию, я попытался изменить регулярное выражение:

/line1stuff[\n\r]+line2stuff/ 

и исправили проблему! (или, по крайней мере, это частности проблема, я столкнулся с последующими.)

Человек, этот материал не был очевиден. Мне в основном пришлось перенести весь мой скрипт gulp с console.info, console.warn и console.error звонки, чтобы проследить мой путь до оскорбительного фрагмента кода.

В любом случае, я надеюсь, что этот ответ поможет, если кто-то другой застрянет в этой же сумасшедшей проблеме! :)

+0

На самом деле это случилось со мной. Вы должны сделать запрос на перенос, чтобы проглотить это исправление (возможно, они уже исправили его в другой версии, но с использованием gulp 4 у меня возникла эта проблема), вы используете fountainJS? – valepu

+0

Я использовал FountainJS. –

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