hawx / guard-sass

Guard::Sass automatically rebuilds sass files when modified (like sass --watch)
MIT License
88 stars 35 forks source link

Possibility to use files for `:input` and `:output` #60

Closed AlexWayfer closed 6 years ago

AlexWayfer commented 6 years ago

Sass can do it even with --watch: sass --watch input.scss:output.css.

But when I write this code:

guard(
  :sass,
  input: 'assets/styles/main.scss',
  output: 'public/styles/main.css'
) do
  watch %r{^assets/styles/(.+\.s[ac]ss)$}
end

I'm getting this error:

17:50:49 - ERROR - Guard::Sass failed to achieve its <run_on_changes>, exception was:
> [#] Errno::EEXIST: File exists @ dir_s_mkdir - public/styles/main.css
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:230:in `mkdir'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:230:in `fu_mkdir'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:208:in `block (2 levels) in mkdir_p'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:206:in `reverse_each'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:206:in `block in mkdir_p'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:191:in `each'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/fileutils.rb:191:in `mkdir_p'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:116:in `write_file'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:51:in `block (2 levels) in compile_files'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/2.4.0/benchmark.rb:308:in `realtime'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:50:in `block in compile_files'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:47:in `each'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:47:in `compile_files'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass/runner.rb:23:in `run'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass.rb:149:in `run_on_changes'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass.rb:98:in `run_all'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass.rb:133:in `run_with_partials'
> [#] /home/alex/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/guard-sass-1.6.1/lib/guard/sass.rb:147:in `run_on_changes'
hawx commented 6 years ago

Note the README says directory for these argument,

:input => 'sass'                    # Relative path to the input directory.
                                    # A suffix `/(.+\.s[ac]ss)` will be added to this option.
                                    # default: nil

:output => 'stylesheets'            # Relative path to the output directory.
                                    # default: 'css' or the :input option when supplied

so try using input: assets/styles and output: public/styles instead.

AlexWayfer commented 6 years ago

Note the README says directory for these argument,

Yes, I saw.

so try using input: assets/styles and output: public/styles instead.

I don't want to use directories. I have single entry file and single output file. Sass allows use files instead of directories (it's even more preferred way, judging by the order of examples in the documentation), but guard-sass will not?

AlexWayfer commented 6 years ago

OK, directories works for me for now.

But why there is double compilation?

19:04:33 - INFO - Sass [0.27s] main.scss -> main.css

19:04:33 - INFO - Sass [0.21s] main.scss -> main.css

19:04:33 - INFO - Reloading browser: public/styles/main.css
19:04:33 - INFO - Reloading browser: public/styles/main.css