gpt4 book ai didi

angularjs - Clojurescript与JavaScript的互操作性

转载 作者:行者123 更新时间:2023-12-04 03:20:42 25 4
gpt4 key购买 nike

我主要使用Angular构建了一个应用程序。现在,我想将项目转换为Clojurescript。众所周知,Clojurescript与JavaScript有很好的互操作性,但是反过来可行吗?

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

梦想是用clojurescript编写新功能,并使它们与旧代码并存。

欢迎与此有关的任何提示或技巧。

最佳答案

Clojurescript变量,函数和deftypes/记录是普通的JS变量,函数和构造函数/对象,因此您可以在javascript中使用cljs.core.abc()并调用clojurescript而不会出现问题。

注意事项是:

  • 名字mun。 Clojurescript名称比javascript允许更大范围的字符,因此将混用许多函数名称。例如。 cljs.core/<变为cljs.core._LT_
  • 宏。宏仅在clojurescript编译时存在,因此您不能使用javascript中的CLJS宏。
  • 高级编译。 Clojurescript核心非常大,它依赖于Google Closure编译器来消除死代码,该代码仅在高级编译中可用。在纯clojurescript代码but harder in javascript code中,安全地使用高级编译非常容易。 (最大的危险是混合使用字符串和符号属性访问。)

  • 您有多种选择:
  • CLJS将旧代码嵌入为库。您的程序入口点是CLJS,但使用您的遗留代码,例如外部库。您的遗留代码为CLJS调用您的遗留代码提供了一个外部方法。旧版代码仅调用CLJS函数,这些函数是使用^:export(如果定义名称)或类似 goog.exportSymbol 显式导出的。 CLJS和遗留代码部署在单独构建的单独JS文件中。
  • CLJS直接嵌入旧代码。程序入口点是CLJS,但是您的旧代码是编译到同一项目中的其他js。 CLJS和遗留代码部署在clojurescript编译器构建的单个JS文件中。要使用高级编译,您的旧代码必须能够安全地与高级编译一起使用,并且结构化后才能与Google Closure编译器一起使用(goog.provides/requires,类型注释等)。 Angular可能必须保持分离,但是有一个angular extern available
  • 旧版代码将CLJS代码作为库调用。这与“CLJS将旧代码作为库嵌入”几乎相同,不同之处在于您的入口点是旧代码,并且它调用导出的cljs函数。
  • 旧版代码通过诸如mori之类的库使用一些CLJS功能。在这里,您不是直接使用CLJS,而是一个JS库,该库将clojurescript的某些功能作为普通JS公开。它仍然是一个单独的js库,并且您永远不会编写任何clojurescript。
  • 关于angularjs - Clojurescript与JavaScript的互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com