1

我想在命令行中使用 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)

我一直在努力解决这个问题太久了。

4

1 回答 1

0

好的,所以对于遇到这个(显然非常罕见)问题的下一个人,您需要修补Sprockets::Environment.js_compressor=

module Sprockets
  class Environment < Base
    def js_compressor=(compressor)
      register_compressor 'application/javascript', :terser, Terser::Compressor
      super
    end
  end
end
于 2021-11-23T18:54:16.107 回答