LINUX.ORG.RU

Компиляция js в rails

 assets, precompile, ,


0

1

У меня возникли проблемы с компиляцией js, потому как оказалось, что при этом меняются имена функций-конструкторов (классов coffee), а я на это подписался (в 11 местах -_- это у меня и имена css классов, и ключи хешей). Теперь я вижу три варианта:

а) ввести специальную переменную (имя класса), самостоятельно ее заполнять;

б) отключить переименовывание функций (кстати как?);

в) отказаться от встроенной в рельсы компиляции (чем тогда склеивать?).

★★★★

Последнее исправление: special-k (всего исправлений: 2)

короче, сделал так:

  # Compress JavaScripts and CSS
  config.assets.compress = true
  class Transformer
    def compress(string)
      Uglifier.new(:mangle => false).compile(string)
    end
  end
  config.assets.js_compressor = Transformer.new

special-k ★★★★
() автор топика
Ответ на: комментарий от daris

Да: локаничный (ведь «правильные техники» программирования на js довольно страшны и громоздки - замыкания например), не засоряет глобальный скоп, сам ставит точки с запятой.

Ложка дегтя - отсутствие поддержки yield и let.

special-k ★★★★
() автор топика
Ответ на: комментарий от daris

Чувак, а зачем CoffeeScript? Это во фронтенде удобнее обычного JS?

Это ох####нно удобнее чем обычный js.

Но его вопроса, я не понимаю, каким образом имена конструкторов меняются, речь про компрессию, но имена везде в коде меняются, откуда проблемы возникают?

Reaper ★★
()
Последнее исправление: Reaper (всего исправлений: 1)
Ответ на: комментарий от Reaper

например

class Control.BaseControl
  constructor: (params)->
    if params?
      for k,v of params
        @[k] = v
    @doms = []
транслируется в
  Control.BaseControl = (function() {

    function BaseControl(params) {
      var k, v;
      if (params != null) {
        for (k in params) {
          v = params[k];
          this[k] = v;
        }
      }
      this.doms = [];
    }
  }
а потом uglifier сделает так:
  Control.BaseControl = (function() {
    function a(params) {
     ...
    }
  }

special-k ★★★★
() автор топика
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k

ИМХО неудачный пример:

function() {}
(window.options || {}).property

и так понятно, что парсер склеит всё в одну строку.

нужны для strict mode

Нафиг-нафиг эту ненужную хрень. )

Reaper ★★
()
Последнее исправление: Reaper (всего исправлений: 1)
Ответ на: комментарий от Reaper

и так понятно, что парсер склеит всё в одну строку.

А они могут быть в разных файлах, а после склеивания окажутся друг под другом.

Нафиг-нафиг эту ненужную хрень. )

js из strict mode должен работать лучше, т.к. на js надо писать строго.

special-k ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.