Как/можно ли исключить унаследованные внешние библиотеки из вывода компилятора ClojureScript?

Я использую reagent 0.5.0, который зависит от cljsjs/react. Последний поставляется со следующими deps.cljs

{:foreign-libs [{
 :file "cljsjs/development/react.inc.js",
 :file-min "cljsjs/production/react.min.inc.js",
 :provides ["cljsjs.react"]}],
 :externs ["cljsjs/common/react.ext.js"]}

что приводит к тому, что JavaScript React попадает в вывод компилятора.

Я хотел бы предотвратить это, потому что я также хочу использовать React на простых страницах JavaScript.

Кроме того, reagent/core.cljs имеет директиву :require [cljsjs.react] (Чтобы принудительно включить?), поэтому зависимость нельзя просто опустить.

Есть ли способ предотвратить попадание React в вывод компилятора?


person Andreas Steffan    schedule 19.05.2015    source источник
comment
Есть ли причина, по которой вы не можете использовать пакетный react.js в своем собственном коде JS? Я думаю, что он экспортируется в window, поэтому вы сможете использовать его таким образом.   -  person skrat    schedule 20.05.2015
comment
Я бы предпочел, чтобы собственный JS не зависел от вывода, сгенерированного компилятором ClojureScript. На самом деле, я хотел бы, чтобы скомпилированный код ClojureScript и собственный JS зависели от версии React для webjars. Тем не менее, я могу в конечном итоге сделать то, что вы предлагаете, если не будет альтернативы.   -  person Andreas Steffan    schedule 20.05.2015


Ответы (1)


Из файла сведений о реагенте (https://github.com/reagent-project/regent):

If you want the version of React with addons, you'd use something like this instead:

[reagent "0.5.0" :exclusions [cljsjs/react]]
[cljsjs/react-with-addons "0.12.2-4"]

If you want to use your own build of React (or React from a CDN), you have to use :exclusions variant of the dependency, and also provide a file named "cljsjs/react.cljs", containing just (ns cljsjs.react), in your project.

Итак, просто используйте параметр :exclusions в своих зависимостях и укажите свое собственное пространство имен cljsjs/react, и все готово. Однако в этот момент вы должны убедиться, что React загружается до Reagent.

person Walton Hoops    schedule 20.05.2015
comment
Пропустил трюк, чтобы добавить свое собственное пустое пространство имен clsjs.react. Работает отлично. Спасибо! - person Andreas Steffan; 21.05.2015