如何在ClojureScript中引入外部JavaScript库

5
我们正试图在目前使用angularjs的项目中引入clojurescript。我们正在使用一个外部的javascript库——datamaps。我们使用“:foreign-libs”编译选项以以下方式获取依赖文件:
 :compiler {:output-to "resources/public/js/testable.js"                                                                       
                              :main "gofigure.test-runner"                                                                                       
                              :foreign-libs [{:file "globe.js"                                                                                   
                                              :provides ["globe"]}                                                                               
                                             {:file "datamaps/src/js/datamaps.js"                                                                
                                              :provides ["datamaps"]}                                                                            
                                             {:file "d3/d3.js"                                                                                   
                                              :provides ["d3"]}                                                                                  
                                             {:file "topojson/topojson.js"                                                                       
                                              :provides ["topojson"]}}}

我们遇到了一个错误,提示为:"Cannot read property 'world' of undefined"。
我们将这个问题缩小到datamaps文件中的问题,我们认为这是因为在foreign-libs选项中,我们只提到了特定的datamaps.js文件,而没有包含datamaps文件夹中的其他文件,因此无法正确编译整个库。
有没有办法将整个库作为依赖项包含进来,而不仅仅是单个文件?

想一次性添加整个文件夹吗?或者让依赖项自动下载? - Mrinal Saurabh
1
@Mrinal 我们有一个 bower 文件,它会下载依赖项,使它们在文件结构中可用,但我们无法通过我们的 ClojureScript 代码访问这些文件。 - Kusum Ijari
2
最受欢迎的JS库都可以在http://cljsjs.github.io/上找到。使用这些库的好处是,当您在ns声明中需要它们时,它们会被加载。此外,它们还提供了externs,因此高级编译可以正常工作。为了解决这个问题,为这个库做出贡献可能是值得的。 - Michiel Borkent
1个回答

1

Shadow-cljs可以解决这个问题。

Shadow-cljs可靠地、最优地、以及使用最少的配置来解决这些问题。特别是,shadow-cljs让您可以使用npm或yarn安装npm模块,并使用生成的package.json捆绑外部依赖项。

更多详细信息请参见https://gist.github.com/jmlsf/f41b46c43a31224f46a41b361356f04d


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接