es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo registro un compresor con ruedas dentadas en la línea de comandos?

Quiero utilizar Sprockets en la línea de comandos (con el paquete Ruby-sprockets de Debian) y quiero utilizar Terser como compresor de JavaScript (porque Uglify no es compatible con ES6). Toda la documentación que he visto sugiere que puedo crear un archivo con el siguiente código:

require 'sprockets'
require 'terser'

Sprockets.register_compressor 'application/javascript', :terser, Terser::Compressor

para registrar Terser con Sprockets, y luego agrego un --require ARCHIVO a mi llamada a sprockets en la línea de comandos. Sé que está procesando el script, porque puedo agregar algo como esto al archivo:

Sprockets.js_compressor = :terser
puts Sprockets.js_compressor

y muestra Terser::Compressor como era de esperar.

SIN EMBARGO. Cuando ejecuto sprockets con algo similar a esto:

sprockets --require ./register_compressor.rb --js-compressor=terser ...

Obtengo la respuesta:

/usr/lib/ruby/vendor_ruby/sprockets/compressing.rb:63:in `js_compressor=':
unknown compressor: terser (Sprockets::Error)

Llevo mucho tiempo intentando resolver este problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para usar Sprockets en la línea de comando con Terser como compresor de JavaScript, puedes seguir estos pasos:

    1. Crea un archivo llamado register_compressor.rb con el siguiente contenido:
    require 'sprockets'
    require 'terser'
    
    Sprockets.register_compressor 'application/javascript', :terser, Terser::Compressor
    
    1. Ejecuta el comando sprockets con la opción --require para cargar el archivo register_compressor.rb:
    sprockets --require ./register_compressor.rb ...
    
    1. Especifica el compresor terser con la opción --js-compressor:
    sprockets --require ./register_compressor.rb --js-compressor=terser ...
    

    Sin embargo, si aún recibes el error “unknown compressor: terser“, puede que necesites verificar si la gema Terser está instalada e intentar requerirla explícitamente en el archivo register_compressor.rb:

    require 'sprockets'
    require 'terser'
    
    begin
      require 'terser'
    rescue LoadError
      STDERR.puts "¡Necesitas instalar la gema 'terser'!"
      STDERR.puts "Intenta ejecutar: gem install terser"
      exit(1)
    end
    
    Sprockets.register_compressor 'application/javascript', :terser, Terser::Compressor
    

    Espero que esto te ayude a solucionar el problema que has estado enfrentando.

Comments are closed.