10
10
11
11
CLEAN . include %w[ protoc.exe ruby *.proto *.tar.gz *.zip ]
12
12
13
- CLOBBER . include %w[ dart-sass cli.rb embedded_sass_pb.rb ]
13
+ CLOBBER . include %w[ dart-sass cli.rb embedded_sass_pb.rb node_modules package-lock.json ]
14
14
15
15
file 'protoc.exe' do |t |
16
16
fetch ( ENV . fetch ( 'PROTOC_BIN' ) { SassConfig . default_protoc } , t . name )
17
17
chmod 'a+x' , t . name
18
18
end
19
19
20
- file 'dart-sass' do |t |
20
+ file 'dart-sass/sass ' do |t |
21
21
raise if ENV . key? ( 'DART_SASS' )
22
22
23
23
gem_install 'sass-embedded' , SassConfig . gem_version , SassConfig . gem_platform do |dir |
@@ -29,34 +29,60 @@ rescue StandardError
29
29
rm archive
30
30
end
31
31
32
+ file 'node_modules/sass' do
33
+ sh 'npm' , 'install'
34
+ end
35
+
36
+ task 'dart-sass' do
37
+ Rake ::Task [ 'dart-sass/sass' ] . invoke
38
+ rescue NotImplementedError
39
+ Rake ::Task [ 'node_modules/sass' ] . invoke
40
+ end
41
+
32
42
file 'cli.rb' => %w[ dart-sass ] do |t |
33
43
require_relative '../../lib/sass/elf'
34
44
35
- exe = 'dart-sass/sass'
36
- exe = "#{ exe } #{ [ '' , '.bat' , '.exe' ] . find { |ext | File . exist? ( "#{ exe } #{ ext } " ) } } "
45
+ begin
46
+ exe = 'dart-sass/sass'
47
+ exe = "#{ exe } #{ [ '' , '.bat' , '.exe' ] . find { |ext | File . exist? ( "#{ exe } #{ ext } " ) } } "
37
48
38
- raise " #{ exe } not found" unless File . exist? ( exe )
49
+ raise Errno :: ENOENT , exe unless File . exist? ( exe )
39
50
40
- runtime = 'dart-sass/src/dart'
41
- runtime = "#{ runtime } #{ [ '' , '.exe' ] . find { |ext | File . exist? ( "#{ runtime } #{ ext } " ) } } "
42
- snapshot = 'dart-sass/src/sass.snapshot'
51
+ runtime = 'dart-sass/src/dart'
52
+ runtime = "#{ runtime } #{ [ '' , '.exe' ] . find { |ext | File . exist? ( "#{ runtime } #{ ext } " ) } } "
53
+ snapshot = 'dart-sass/src/sass.snapshot'
43
54
44
- command = if File . exist? ( runtime ) && File . exist? ( snapshot )
45
- [ runtime , snapshot ]
46
- else
47
- [ exe ]
48
- end
55
+ command = if File . exist? ( runtime ) && File . exist? ( snapshot )
56
+ [ runtime , snapshot ]
57
+ else
58
+ [ exe ]
59
+ end
49
60
50
- interpreter = File . open ( command [ 0 ] , 'rb' ) do |file |
51
- Sass . const_get ( :ELF ) . new ( file ) . interpreter
52
- rescue ArgumentError
53
- nil
54
- end
61
+ interpreter = File . open ( command [ 0 ] , 'rb' ) do |file |
62
+ Sass . const_get ( :ELF ) . new ( file ) . interpreter
63
+ rescue ArgumentError
64
+ nil
65
+ end
55
66
56
- command_source = command . map do |argument |
57
- "File.absolute_path('#{ argument } ', __dir__).freeze"
58
- end . join ( ',
67
+ command_source = command . map do |argument |
68
+ "File.absolute_path('#{ argument } ', __dir__).freeze"
69
+ end . join ( ',
59
70
' )
71
+ rescue Errno ::ENOENT
72
+ sass = 'node_modules/sass'
73
+
74
+ script = File . join ( sass , SassConfig . package_json ( sass ) [ 'bin' ] [ 'sass' ] )
75
+
76
+ raise Errno ::ENOENT , script unless File . exist? ( script )
77
+
78
+ interpreter = nil
79
+
80
+ command_source = [
81
+ "'node'" ,
82
+ "File.absolute_path('#{ script } ', __dir__).freeze"
83
+ ] . join ( ',
84
+ ' )
85
+ end
60
86
61
87
if interpreter . nil?
62
88
File . write ( t . name , <<~CLI_RB )
@@ -290,12 +316,14 @@ module SassConfig
290
316
291
317
module_function
292
318
293
- def dart_sass_version
319
+ def package_json ( path = '.' )
294
320
require 'json'
295
321
296
- spec = JSON . parse ( File . read ( File . absolute_path ( 'package.json' , __dir__ ) ) )
322
+ JSON . parse ( File . read ( File . absolute_path ( 'package.json' , path ) ) )
323
+ end
297
324
298
- spec [ 'dependencies' ] [ 'sass' ]
325
+ def dart_sass_version
326
+ package_json [ 'dependencies' ] [ 'sass' ]
299
327
end
300
328
301
329
def default_dart_sass
0 commit comments