在Clojurescript中需要goog.lang.Sha256时出错?

在Clojurescript中需要goog.lang.Sha256时出错?,clojure,closures,google-closure-compiler,google-closure,clojurescript,Clojure,Closures,Google Closure Compiler,Google Closure,Clojurescript,当我试图在clojurescript项目中要求Sha256时: (ns tutorial-client.sha256 (:require [goog.crypt.Sha256 :as hasher])) 我没有得到任何实际的编译错误,但当我在浏览器中打开clojurescript->js输出时,我确实得到了以下结果 Uncaught Error: Undefined nameToPath for goog.crypt.Sha256 base.js:586 Uncaught Refer

当我试图在clojurescript项目中要求Sha256时:

(ns tutorial-client.sha256
  (:require
   [goog.crypt.Sha256 :as hasher]))
我没有得到任何实际的编译错误,但当我在浏览器中打开clojurescript->js输出时,我确实得到了以下结果

Uncaught Error: Undefined nameToPath for goog.crypt.Sha256 base.js:586
Uncaught ReferenceError: cljs is not defined rendering.js:7
goog.require could not find: goog.crypt.Sha256 base.js:333
Uncaught Error: goog.require could not find: goog.crypt.Sha256 base.js:337
Uncaught ReferenceError: cljs is not defined behavior.js:8
Uncaught ReferenceError: cljs is not defined app.js:100
Uncaught TypeError: Cannot read property 'IE' of undefined eventtype.js:60
Uncaught TypeError: Cannot read property 'entryPointRegistry' of undefined events.js:1084
Uncaught TypeError: Cannot read property 'IE' of undefined browserfeature.js:35
Uncaught TypeError: Cannot read property 'Error' of undefined asserts.js:71
Uncaught TypeError: Cannot read property 'prototype' of undefined base.js:1407
Uncaught Error: Invalid event type events.js:139
Uncaught Error: Invalid event type events.js:139
Uncaught TypeError: Cannot call method 'call' of undefined 
我认为大部分都可以忽略,问题是它基本上找不到goog.crypt.Sha256的最大错误。有趣的是,如果我将代码更改为以下内容,我可以消除所有错误

(ns tutorial-client.sha256
  (:require
   [goog.net.XhrIo :as hasher]))

不管怎样,我只想访问goog.crypt.sha256。谢谢。

请记住,在访问原始javascript函数时,您需要使用Clojure的互操作性功能,就像在JVM上一样。这意味着您的命名空间声明将更改为:

(ns tutorial-client.sha256
  (:import goog.crypt.Sha256]))

(.log js/console (Sha256.))
;; this will log the instance to the browser console
从这里开始,您应该能够通过调用实例的javascript函数来正常使用它:

(def sha-256 (Sha256.))
(.update sha-256 [])

(.log js/console (.digest sha-256))

嘘,原来我脑袋软。我认为完全错误的事情和真正的问题是goog.crypt.Sha256是一个最近的库,它没有包含在我使用的clojurescript版本中

从google消息组:

调用clojurescript时,在浏览器中加载js就足够了。如果你做高级编译,别忘了设置外部。啊,我看你是在基座上做的。有趣的是,我也做了一个加密应用作为第一个项目。是的,在底座中,不需要使用goog.require。确保你在application.html和tooling.html中有js(如果你在数据流方面需要它的话)。谢谢,我尝试了一下,但我似乎遇到了麻烦,可能很简单,但这就是这些配置的方式。我把我的问题的一个git示例发布在Destale用户组上。如果我得到一个答案,我会写一个答案。如果ayone想直接修改基座代码,它链接在这里。我应该补充的是,您可以通过将光盘放入目录中,键入“leinrepl”,然后通过键入“(start)”启动服务器来运行上述代码。然后访问端口3000的应用程序。我尝试按照上面的说明进行操作,但似乎仍然不起作用(相同的错误)。我在问题评论中发布了一个问题的git版本的链接。我没有给予足够的关注,也没有意识到你在使用基座。我没有这方面的经验,所以我不确定我是否能帮上忙。以上内容适用于一个普通的Clojurescript应用程序。很好,我感谢您的帮助。这可能是因为Destale有一个旧的Clojurescript依赖项,不确定它们是否允许或建议重写。很高兴您能找到它:)