首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojurescript与JavaScript的互操作性

问Clojurescript与JavaScript的互操作性
EN

Stack Overflow用户
提问于 2014-11-14 16:57:25
回答 2查看 3K关注 0票数 10

我已经构建了一个应用程序,使用的大多是角。现在我想把这个项目转到Clojurescript。正如我们都知道的,Clojurescript与JavaScript有很好的互操作,但反过来做可行吗?

常规JavaScript /Angular代码如何利用Clojurescript生成的JavaScript?

我们的梦想是在clojurescript中编写新特性,并让它们与遗留代码并行工作。

任何有关这方面的提示或技巧都是受欢迎的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 17:45:29

Clojurescript、函数和deftypes/记录是正常的JS var、函数和构造函数/对象,因此您可以在javascript中使用cljs.core.abc()并无问题地调用clojurescript。

注意事项如下:

  1. 咀嚼的名字。Clojurescript名称允许的字符范围比javascript更广,因此将处理许多函数名。cljs.core/<变成cljs.core._LT_。
  2. 宏。宏只存在于clojurescript编译时,因此不能使用javascript中的CLJS宏。
  3. 高级汇编。Clojurescript核心非常大,它依赖Google闭包编译器消除死区代码,这只能在高级编译中使用。使用高级编译安全是非常容易的纯文本代码,但是在javascript代码中更难。(最大的危险是混合字符串和符号属性访问。)

你有很多选择:

  • CLJS将遗留代码嵌入到库中。您的程序入口点是CLJS,但将遗留代码用作外部库。遗留代码提供了CLJS调用遗留代码的外部代码。遗留代码只调用CLJS函数,这些函数使用^:export (如果您定义名称)或类似于goog.exportSymbol的东西显式导出。CLJS和遗留代码部署在单独构建的JS文件中。
  • CLJS直接嵌入遗留代码。程序入口点是CLJS,但遗留代码是编译到同一个项目中的其他js。CLJS和遗留代码部署在一个由clojurescript编译器构建的JS文件中。要使用高级编译,您的遗留代码必须可以安全地用于高级编译,并与Google闭包编译器一起使用(goog.Providing/requires,类型注释等)。角可能必须保持独立,但有一个提供角度外置器。
  • 遗留代码将CLJS代码作为库调用。这与"CLJS将遗留代码嵌入到库中“差不多,只是入口点是遗留代码,它调用导出的cljs函数。
  • 遗留代码通过库(如莫里 )使用一些CLJS特性。在这里,您不是直接使用CLJS,而是一个JS库,它将clojurescript的一些特性公开为普通JS。它仍然是一个单独的js库,并且您从不编写任何clojurescript。
票数 14
EN

Stack Overflow用户

发布于 2014-11-16 06:39:19

对于ClojureScript中的角积分,可以使用旋回延伸。对于从Clojure类型到Java类型的数据转换,您可以使用clj->js。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26935101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档