我想在命令行使用 Sprockets(使用 ruby-sprockets Debian 软件包),并且我想使用 Terser 作为 JavaScript 压缩器(因为 Uglify 不支持 ES6)。我见过的所有文档都表明我可以使用以下代码创建一个文件:
require 'sprockets'
require 'terser'
Sprockets.register_compressor 'application/javascript', :terser, Terser::Compressor
向 Sprockets 注册 Terser,然后在命令行中对
--require FILE
的调用中添加 sprockets
。我知道它正在处理脚本,因为我可以将类似的内容添加到文件中:
Sprockets.js_compressor = :terser
puts Sprockets.js_compressor
它会打印
Terser::Compressor
,正如人们所期望的那样。
但是。当我用类似的东西运行链轮时:
sprockets --require ./register_compressor.rb --js-compressor=terser ...
我收到回复:
/usr/lib/ruby/vendor_ruby/sprockets/compressing.rb:63:in `js_compressor=':
unknown compressor: terser (Sprockets::Error)
我已经为这个问题苦苦挣扎太久了。
好的,所以对于下一个遇到这个(显然非常罕见)问题的人,你需要修补
Sprockets::Environment.js_compressor=
:
module Sprockets
class Environment < Base
def js_compressor=(compressor)
register_compressor 'application/javascript', :terser, Terser::Compressor
super
end
end
end
在环境/生产.rb
require "terser"
Sprockets.register_compressor("application/javascript", :terser, Terser::Compressor)
config.assets.js_compressor = :terser