2015-08-13 3 views
0

Я пытаюсь создать очень простую систему сборки с Grunt в окнах, используя Cygwin для обработки компиляции, конкатенации и минимизации моих файлов scss/css и coffee/js.Sass не распознан Grunt в Cygwin

У меня проблема с Грунтом, не признающим Сасса как команду.

Следует отметить, что тот же файл Gruntfile, те же задачи, те же пакеты отлично работают на Linux (почему, конечно!), И эта проблема связана исключительно с реализацией одной и той же системы в Windows.

я правильно установлен на Ruby и Sass (как «рубин -v» и «дерзость -v» работать, как ожидалось), и у меня нет никаких проблем с компиляцией SCSS в CSS из командной строки

$ sass --update sass:css 

и это эффективно конвертирует все .scss-файлы в .css

Grunt сам работает без проблем, компилирует кофе в js, конкатенирует js или css-файлы, уменьшая их и наблюдая за изменениями.

здесь полный Gruntfile.js, для справки

module.exports = function(grunt) { 

    grunt.initConfig({ 
      concat: { 
        js: { 
          src: 'js/*.js', 
          dest: 'build/js/scripts.js', 
        }, 
        css: { 
          src: 'css/*.css', 
          dest: 'build/css/theme.css', 
        }, 
      }, 
      uglify: { 
        jsMin : { 
          files: { 
            'build/js/scripts.min.js' : ['build/js/scripts.js'] 
          }, 
        }, 
      }, 
      cssmin: { 
        styleMin : { 
          files : { 
            'build/css/theme.min.css' : ['build/css/theme.css'] 
          }, 
        }, 
      }, 
      watch: { 
        jsW: { 
          files: ['js/**/*.js'], 
          tasks: ['concat:js','uglify:jsMin'], 
        }, 
        cssW: { 
          files: ['css/**/*.css'], 
          tasks: ['concat:css','cssmin'], 
        }, 
        sassW: { 
          files: ['sass/**/*.scss'], 
          tasks: ['exec'] 
        } 
      }, 
      exec: { 
        Sass : 'sass --update sass:css', 
        Coffee : 'coffee -o js/ -c coffee/' 
      } 
    }); 



    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-contrib-concat'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-cssmin'); 
    grunt.loadNpmTasks('grunt-exec'); 

    grunt.registerTask('default',['exec','concat','uglify','cssmin','watch']); 

}; 

если тогда я начинаю grunt он отображает следующее предупреждение

Запуск "Exec: Sass" (EXEC) задачи

'sass' не распознается как внутренняя или внешняя команда, оперативная программа или командный файл.

завершался с кодом: 1.

Внимание: Задача "Exec: Sass" не удалось. Используйте -force для продолжения.

Прервано из-за предупреждений.

как я уже говорил прежде, чем система отлично работает на Linux, так что я думаю, есть что-то не так с моими Путей, но почему же тогда будет Sass отлично работает из командной строки и не распознается через хрюкать?


последнее, что я хотел бы отметить, что, в течение некоторого копания и тестирование, чтобы попытаться угадать, в чем проблема, прежде чем отправлять здесь на SO, я обнаружил, что вызов любой функции Баша, которая имеет не .exe в cygwin/bin показывает ту же ошибку

http://i.stack.imgur.com/DGLe5.png (тестирование на файлы sass '' sdoc 'и' ruby.ехе ')

модифицированный пехотинец-Exec для тестирования:

exec: { 
        Sass : 'sass -v', 
        Ruby : 'ruby -v', 
        Sdoc : 'sdoc -v', 

} 

и они показали следующее после grunt --force http://i.stack.imgur.com/3boy7.png

в то время как из обычной командной строки

$ sass -v && ruby -v && sdoc -v 
Sass 3.4.16 (Selective Steve) 
ruby 2.0.0p598 (2014-11-13) [x86_64-cygwin] 
4.2.0 

Я серьезно не знаю, куда идти Здесь, любая помощь будет оценена.

+0

Вы должны проверить пакет npm под названием 'grunt-contrib-sass', он компилирует ваш sass в css. Взятие этого маршрута может помешать проблеме, имеющейся у вас сейчас. – Josh

+0

с использованием 'grunt-contrib-sass' срабатывает при ошибке: _Warning: вам нужно установить Ruby и Sass и в PATH для выполнения этой задачи. Дополнительная информация: https://github.com/gruntjs/grunt-contrib-sass Используйте -force для продолжения. Это еще более странно, поскольку оба установлены и в моем PATH. Я добавлю обходное решение, которое я нашел в качестве ответа. – Luken00

+0

Установите sass и ruby ​​GLOBALY на свой компьютер. – Josh

ответ

1

Я до сих пор не нашел решение проблемы. Однако я нашел обходное решение, которое работает отлично, на случай, если кто-то заинтересован или имеет ту же проблему, что и я.

решение включает в себя запуск дерзость непосредственно через Ruby (которые признают мой grunt-exec задача), так что я редактировал свой Gruntfile.js следующим образом:

exec: { 
       Sass : 'ruby sass.rb' 
     } 

, который вызывает sass.rb файл в главном каталоге, который является рубиновый скрипт файл.

require "sass" 
options = { 
    :syntax => :scss, 
    :style => :compressed, 
    :load_paths => ['./src/sass/'] 
    # load_paths is required in case your 'master.scss' files use @import to attach other scss files 
} 

render = Sass::Engine.new(File.read("src/sass/master.scss"), options).render 
File.write("src/css/master.css", render) 

Вы можете найти дополнительные опции в SASS documentation


Я знаю, это не является фактическим ответ на мой вопрос, но это единственное, что работает сразу, без каких-либо проблем. Я по-прежнему буду пытаться выяснить, почему более распространенные решения (grunt-contrib-sass и grunt-exec) не будут работать, но с этим обходным решением я запускаю свою систему сборки.

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