'a is undefined' при компиляции cljs prj с модулем NPM в разделе: профиль prod

Я следовал этому совету: http://blob.tomerweller.com/reagent-import-react-components-from-npm и он работал отлично. Мне даже удалось использовать один из моих собственных модулей NPM поверх этого примера приложения перефрейма: https://github.com/Day8/re-frame/tree/master/examples/simple/

Запуск полученного приложения с:

lein clean && lein figwheel

все работает нормально, но когда я делаю:

lein do clean, with-profile prod compile

Я получаю TypeError: a is undefined, Есть идеи, чтобы это исправить?

Позвольте мне предоставить вам код: плохой коммит здесь, в то время как оба :dev а также :prod профили работают нормально на этом только что предыдущем коммите.

Обновление: мне удалось исправить скомпилированную версию следующим образом (см. Коммит):

  return d.c?d.c(c,v,w):d.call(null,c,v,w)}}(G,r,b,c,d,e)),I=dw(G);rf.b?: […]
  };w.b=v;w.c=f;return w}()}(c,d,e,f))};hf.b(ow,ik);hf.b(ow,bp);hf.b(ow,To); […]
  function nx(a){var b=window.deps["react-mathjax"],
-    c=window.deps.clubexpr.kf;
+    c=window.deps.clubexpr.renderLispAsLaTeX;
  return new U(null,3,5,V,[Vj,b.Context,new U(null,4,null)}
  function Wv(){return function(a){return function(){return new U(null,6,5,V,[…]

Это кажется мне неправильной конфигурацией компиляции или ошибкой.

Обновление 2: мой код компилируется нормально, если я установил :optimizations в :simple (было :advanced). Посмотрите документ компилятора cljs об этой опции.

Благодарю.

1 ответ

Код, который терпит неудачу, здесь.

Похоже, вам может потребоваться предоставить внешние компоненты для clubexpr, чтобы компилятор Closure знал, что не нужно переписывать renderLispAsLatexкакkf, При компиляции в:simple компилятор Closure не переписывает имена функций, поэтому эта проблема не будет отображаться.

Как примечание, вы, вероятно, не должны использоватьagetчтобы получить объекты из окна,agetпредназначен только для доступа к массиву. Чтобы получить объекты, вы должны использовать goog.object/get, См. Этот пост в Проверенном доступе к массиву для получения дополнительной информации об этом.

Другие вопросы по тегам