2016-08-17 16 views
10

के साथ काम नहीं कर रहा है, मैं अपने प्रोजेक्ट में नए बनाए गए एसएएसएस आयात को ऑटो जोड़ने के लिए gulp-इंजेक्ट का उपयोग कर रहा हूं। यह ठीक काम करता है, नए एस.ए.एस.एस. फ़ाइलों को सही ढंग आयात किया जाता है, लेकिन जब एक पहले से ही आयात की गई फ़ाइल जबकि घूंट-घड़ी हटा दी जाती है चल रहा है यह निम्न त्रुटि के साथ दुर्घटनाओं:gulp-inject gulp-watch

Error: _dev\style\style.scss 
Error: File to import not found or unreadable: components/_test - Copy.scss 
     Parent style sheet: stdin 
     on line 2 of stdin 
>> @import "components/_test - Copy.scss"; 

मैं एक अच्छा कुछ घंटे बिताए हैं काम करने की कोशिश बाहर क्यों यह पुराने आयात के साथ स्टाइलशीट के पुराने संस्करण को संकलित करने का प्रयास करता है। मैंने एसएएसएस कार्य में देरी निर्धारित की है और गल्प-एसएएस के समय तक आयात वास्तविक फ़ाइल में सही हैं। मैंने पढ़ा है कि गल्प-घड़ी स्टाइलशिप को कैशिंग कर सकती है, लेकिन वास्तव में सुनिश्चित नहीं है।

नीचे मेरी गुलप फ़ाइल की प्रासंगिक बिट्स हैं, नीचे मेरी पूर्ण gulp फ़ाइल का एक लिंक है। (घटकों कार्य एस.ए.एस.एस. कार्य चलाता है)

// SASS 
plugins.watch([paths.dev+'/**/*.scss',!paths.dev+'/style/components/**/*.scss'], function() {gulp.start(gulpsync.sync([ 
    'build-sass' 
]));}); 
// COMPONENTS 
plugins.watch(paths.dev+'/style/components/**/*.scss', function() {gulp.start(gulpsync.sync([ 
    'inject-deps' 
]));}); 

एस.ए.एस.एस. कार्य

gulp.task('build-sass', function() { 
    // SASS 
    return gulp.src(paths.dev+'/style/style.scss') 
    .pipe(plugins.wait(1500)) 
    .pipe(plugins.sass({ noCache: true })) 
    .pipe(gulp.dest(paths.tmp+'/style/')); 
}); 

इंजेक्षन कार्य

gulp.task('inject-deps', function() { 
    // Auto inject SASS 
    gulp.src(paths.dev+'/style/style.scss') 
    .pipe(plugins.inject(gulp.src('components/**/*.scss', {read: false, cwd:paths.dev+'/style/'}), { 
     relative: true, 
     starttag: '/* inject:imports */', 
     endtag: '/* endinject */', 
     transform: function (filepath) { 
      return '@import "' + filepath + '";'; 
     } 
    })) 
:

यहाँ मेरी घड़ी कार्य दिए गए हैं

पूर्ण Gulp फ़ाइल:

: https://jsfiddle.net/cwu0m1cp/

के रूप में यहाँ का अनुरोध किया एस.ए.एस.एस. आयात के साथ दायर की है, यह ठीक रूप में लंबे समय से काम करता है के रूप में घड़ी काम नहीं चल रहा है, आयात की गई फ़ाइलें नहीं सीएसएस शामिल

एस.ए.एस.एस. फ़ाइल से पहले हटाएं:

/* inject:imports */ 
@import "components/_test.scss"; 
@import "components/_test-copy.scss"; 
/* endinject */ 

एस.ए.एस.एस. फ़ाइल के बाद उसे हटा:

/* inject:imports */ 
@import "components/_test.scss"; 
/* endinject */ 
+0

दोनों इंजेक्शन-डीपीएस और 'बिल्ड-सास' दोनों एक ही फाइल का स्रोत हैं। यह सिर्फ एक धारा/कार्य क्यों नहीं है?और 'इंजेक्शन-डीपीएस' में 'gulp.dest()' क्यों नहीं है? –

+0

और उन सभी कार्यों के साथ क्या हो रहा है: 'watch: message',' watch: reload', 'clean: pub', 'build: pub'। या तो वे आपके प्रश्न के लिए प्रासंगिक हैं तो आपको उन्हें शामिल करने की आवश्यकता है। या वे प्रासंगिक नहीं हैं तो उन्हें उल्लेख करने से परेशान मत हो। पढ़ें [यह] (http://stackoverflow.com/help/mcve) –

+0

मुझे एक घड़ी लूप मिल रहा था जब दोनों सास और इंजेक्शन एक ही काम में थे, मुझे इसके कारण उन्हें अलग करना पड़ा। मैंने अपना पूरा कार्य कॉपी किया है, आपके द्वारा उल्लिखित बिट्स प्रासंगिक नहीं हैं, अगर मैं स्पष्ट हूं तो मैं उन्हें निकाल सकता हूं। – Alex

उत्तर

5

आपका build-sass कार्य तब भी शुरू होता है जब आप style/components/ में फ़ाइल हटाते हैं। उस समय तक inject-deps कार्य अभी तक नहीं चला है, इसलिए संबंधित @import अभी तक हटा नहीं गया है।

कारण ऐसा होता है इस लाइन की वजह से है:

plugins.watch([paths.dev+'/**/*.scss',!paths.dev+'/style/components/**/*.scss'] 

आप वास्तव में यहाँ शुरुआत में एक ! साथ एक स्ट्रिंग नहीं बना रहे। आप paths.dev स्ट्रिंग को false (जावास्क्रिप्ट को फेंक दें!) का मूल्यांकन करते हैं। तो अपने पथ 'false_dev/style/components/**/*.scss'

किया जा रहा समाप्त होता है यह इस बजाय होना चाहिए:

plugins.watch([paths.dev+'/**/*.scss','!' + paths.dev+'/style/components/**/*.scss'] 

(। इसके बारे में चिंता मत करो मुझे अब यह पता लगाने की तुलना में यह होना चाहिए, भी लिया ...)

+0

आश्चर्यजनक है, मैं नहीं ' टी ने देखा है कि दिनों के लिए! बहुत बहुत धन्यवाद! – Alex