22
33require 'image_optim/option_helpers'
44require 'image_optim/worker'
5+ require 'fspath'
56
67class ImageOptim
78 class Worker
@@ -42,11 +43,18 @@ def optimize(src, dst, options = {})
4243 --input #{ src }
4344 --output #{ dst }
4445 ]
45- disable_plugins . each do |plugin_name |
46- args . unshift "--disable=#{ plugin_name } "
47- end
48- enable_plugins . each do |plugin_name |
49- args . unshift "--enable=#{ plugin_name } "
46+ if resolve_bin! ( :svgo ) . version >= '2.0.0'
47+ unless disable_plugins . empty? && enable_plugins . empty?
48+ config_file = plugins_config_file
49+ args . unshift "--config=#{ config_file . path } "
50+ end
51+ else
52+ disable_plugins . each do |plugin_name |
53+ args . unshift "--disable=#{ plugin_name } "
54+ end
55+ enable_plugins . each do |plugin_name |
56+ args . unshift "--enable=#{ plugin_name } "
57+ end
5058 end
5159 args . unshift "--precision=#{ precision } " if allow_lossy
5260 execute ( :svgo , args , options ) && optimized? ( src , dst )
@@ -63,6 +71,28 @@ def parse_plugin_names(v)
6371 end
6472 end
6573 end
74+
75+ def plugins_config_file
76+ @plugins_config_file ||= FSPath . temp_file ( %w[ image_optim .js ] ) . tap do |config_file |
77+ config_file . puts 'export default {'
78+ config_file . puts ' plugins: ['
79+ config_file . puts ' {'
80+ config_file . puts ' name: \'preset-default\','
81+ config_file . puts ' params: {'
82+ config_file . puts ' overrides: {'
83+ disable_plugins . each do |plugin_name |
84+ config_file . puts " #{ plugin_name } : false,"
85+ end
86+ config_file . puts ' }'
87+ config_file . puts ' }'
88+ config_file . puts ' },'
89+ enable_plugins . each do |plugin_name |
90+ config_file . puts " '#{ plugin_name } ',"
91+ end
92+ config_file . puts ' ]'
93+ config_file . puts '};'
94+ end
95+ end
6696 end
6797 end
6898end
0 commit comments