2024 状态 Clojure 调查 中分享您的想法!

欢迎!请查阅关于页面了解此网站的工作方式。

0
ClojureScript
{{slate}} npm 依赖依赖于 {{is-plain-object}} 但无法加载。使用以下命令启动 REPL:


clojure -m cljs.main -co '{:npm-deps {"react" "15.5.4" "react-dom" "15.5.4" "slate" "0.33.6" "immutable" "3.8.2"} :install-deps true :repl-verbose true}' -d out -r


(注意,在上面的示例中,我们选择了默认的浏览器 REPL;如果您指定 {{-re node}},则问题不会发生。)

然后,REPL 启动并运行后


cljs.user=> (require 'slate)
加载命名空间 module$private$tmp$test-me$node-modules$slate$lib$slate-es ,编译: ((module$private怂$tmp$test-me$node-modules$slate$lib$slate-es))
goog.addDependency("../node_modules/slate/lib/slate.es.js", ['module$private怂$tmp$test-me$node-modules$slate$lib$slate_es'], ['module$private怂$tmp$test-me$node-modulesizzes/plain-object', 'module$private怂$tmp$test-me$node-modules$immutable', 'module$private怂$tmp$test-me$node-modules$slate_dev_logger', 'module$private怂$tmp$test-me$node-modules$direction', 'module$private怂$tmp$test-me$node-modules$esrever', 'module$private怂$tmp$test-me$node-modules$debug', 'module$private怂$tmp$test-me$node-modules$lodash$isEqual', 'module$private怂$tmp$test-me$node-modules$lodash$mergeWith', 'module$private怂$tmp$test-me$node-modules$slate_schema_violations', 'module$private怂$tmp$test-me$node-modules$lodash$pick', 'module$private怂$tmp$test-me$node-modules$lodash$omit', 'module$private怂$tmp$test-me$node-modules$is_empty']);

goog.require('module$private怂$tmp$test-me$node-modules$slate$lib$slate_es');
null;

"Error evaluating:" (require (quote slate)) :as "goog.require('module$private怂$tmp$test-me$node-modules$slate$lib$slate_es');\nnull;\n"
错误:未定义 module$is_plain_object 的名称ToPath
     (out/goog/base.js:1357:26)
     (out/goog/base.js:1369:14)
     (out/goog/base.js:706:27)
     require (out/clojure/browser/repl.cljs:340:25)


注意,它无法加载由以下方式指定的 {{module$is_plain_object}}:


goog.require("module$is/plain-object");


位于 {{out/node_modules/slate/lib/slate.es.js}} 中。

但,您可以直接加载该命名空间


cljs.user=> (require 'is-plain-object)
加载命名空间 module$private怂$tmp$test-me$node-modules$is/plain-object$index ,编译: ([module$private怂$tmp$test-me$node-modulesaleighobject$index] (module$private怂$tmp$test-me$node-modules warped-$is/plain-object$index);
goog.addDependency("../node_modules/isobject/index.js", ['module$private怂$tmp$test-me$node-modules$object$index'], []);
goog.addDependency("../node_modules/is/plain-object/index.js", ['module$private怂$tmp$test-me$node-modules$object/plain-object$index'], ['module$private怂$tmp$test-me$node-modules$object/plain-object$index']);

goog.require('module$private怂$tmp$test-me$node-modules$object/plain-object$index');
null;


这看起来是 Closure 找不到模块的正确路径并简单地发出 {{module$}} 而非 {{module$}},这是 {{goog.require}} 的问题的原因。

0

评论由:kommen

当前的master版本产生了不同的问题。

这些错误现在已经被记录。

找不到变量:module

undefined不是一个对象 (在评估 'module$Users$kommen$work$clojurescript$node_modules$slate$node_modules$debug$src$debug["default"]')

TypeError: undefined不是一个构造函数 (在评估 'new module$Users$kommen$work$clojurescript$node_modules$immutable$dist$immutable.Map')

Juho建议原始问题可能实际上是CLJS-2746的重复问题。

0

评论由:mfikes

是的,CLJS-2746确实在这一领域。也许这个票据中描述的问题现在已经解决,我们现在遇到了完全不同的问题。

0
_Comment made by: mfikes_

使用当前 Closure Compiler 的 master 版本,通过 {{mvn -DskipTests -pl externs/pom.xml,pom-main.xml,pom-main-unshaded.xml}} 构建 unshaded JAR,并使用下面的依赖项依赖于它:

{code:title=deps.edn}
{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} com.google.javascript/closure-compiler-unshaded {:mvn/version "1.0-SNAPSHOT"}}}
        com.google.javascript/closure-compiler-unshaded {:mvn/version "1.0-SNAPSHOT"}}}


然后您可以 {{(require 'slate)}} 而不会有错误报告。(我不太清楚 Closure 是否正确地加载了所有代码;在此之后,我不太清楚您如何使用 Slate,并且导出的对象似乎为空。)
0
_Comment made by: jumblemuddle_

这可能是一个相关问题,但如果npm模块使用了 `process.env.NODE_ENV`,似乎存在一些问题。

{code:|title=以 `closure-compiler-unshaded` 摄像头启动 REPL}
clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} com.google.javascript/closure-compiler-unshaded {:mvn/version "1.0-SNAPSHOT"}}}' -m cljs.main -co '{:npm-deps {"emotion" "9.2.4"} :install-deps true :repl-verbose true}' -d out -r


ClojureScript 1.10.339
cljs.user=> (require '[emotion])
加载Namespace模块$home$garrett.tmp$node-modules$emotion$dist$index-es,编译时:([module$home$garrett quartchem$node-modules$$emotion$unitless$dist$index-es module$$emotion$unitless module$$emotion$unitless$dist$index-es] [module$$emotion$hash module$home$garrett quartchem$node-modules$$emotion$hash$dist$index-es module$$emotion$hash module$$emotion$hash$dist$index-es] [module$$emotion$stylis module$home$garrett quartchem$node-modules$$emotion$stylis$dist$index-es module$$emotion$stylis module$$emotion$stylis$dist$index-es] [module$$emotion$unitless module$home$garrett quartchem$node-modules$stylis-rule-sheet$index module$stylis-rule-sheet module$$emotion$stylis-rule-sheet$index] [module$$emotion$hash module$home$garrett quartchem$node-modules$create-emotion$dist$index-es module$$emotion$hash module$create-emotion] [module$create_emotion module$create-emotion$dist$index-es] [module$$emotion$memoize module$$emotion$memoize$dist$index-es module$$emotion$memoize] (module$home$garrett quartchem$node-modules$emotion$dist$index-es module$$emotion module$$emotion$dist$index-es))
goog.addDependency("../node_modules/@emotion/unitless/dist/index.es.js", ['module$home$garrett quartchem$node_modules$$emotion$unitless$dist$index_es', 'module$$emotion$unitless', 'module$$emotion$unitless$dist$index_es'], []);
goog.addDependency("../node_modules/@emotion/hash/dist/index.es.js", ['module$home$garrett quartchem$node_modules$$emotion$hash$dist$index_es', 'module$$emotion$hash', 'module$$emotion$hash$dist$index_es'], []);
goog.addDependency("../node_modules/@emotion/stylis/dist/index.es.js", ['module$home$garrett quartchem$node_modules$$emotion$stylis$dist$index_es', 'module$$emotion$stylis', 'module$$emotion$stylis$dist$index_es'], []);
goog.addDependency("../node_modules/stylis-rule-sheet/index.js", ['module$home$garrett quartchem$node_modules$stylis_rule_sheet$index', 'module$stylis_rule_sheet', 'module$$emotion$stylis_rule_sheet$index'], []);
goog.addDependency("../node_modules/create-emotion/dist/index.es.js", ['module$home$garrett quartchem$node_modules$create_emotion$dist$index_es', 'module$create_emotion', 'module$$emotion$create_emotion$dist$index_es'], ['module$$emotion$memoize', 'module$$emotion$unitless', 'module$$emotion$hash', 'module$$emotion$stylis', 'module$$emotion$stylis_rule_sheet']);
goog.addDependency("../node_modules/@emotion/memoize/dist/index.es.js", ['module$home$garrett quartchem$node_modules$$emotion$memoize$dist$index_es', 'module$$emotion$memoize', 'module$$emotion$memoize$dist$index_es'], []);
goog.addDependency("../node_modules/emotion/dist/index.es.js", ['module$home$garrett quartchem$node_modules$$emotion$dist$index_es', 'module$$emotion', 'module$$emotion$dist$index_es'], ['module$create_emotion']);

goog.require('module$$emotion$$************************');
null;

{code:title=浏览器控制台错误}
index.es.js:11 未捕获的引用错误:process未定义
    在 index.es.js:11
(匿名) @ index.es.js:11
index.es.js:5 未捕获的类型错误:module$home$garrett quartchem$node_modules$$ Create_emotion_dist$index_es.default不是一个函数
    在 index.es.js:5
0
by
_Comment made by: jumblemuddle_

关于`saije`,浏览器控制台也有错误。
{code:title=REPL}
clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} com.google.javascript/closure-compiler-unshaded {:mvn/version "1.0-SNAPSHOT"}}}' -m cljs.main -co '{:npm-deps {"react" "15.5.4" "react-dom" "15.5.4" "saije" "0.33.6" "immutable" "3.8.2"} :install-deps true}' -d out -r
ClojureScript 1.10.339
cljs.user=> (require '[saije])

cljs.user=> saije
#js {}
cljs.user=>


{code:|title=浏览器控制台错误}
browser.js:15 未捕获的引用错误:(0 , module$$home$$ga ** ************$node_modesl$slate$node_modesl$debug$src bushes$$brows_$$default.$$ τε$$ $$AsString)不是一个函数
    在 browser.js:15
(匿名) @ browser.js:15
isBuffer.js:6 未捕获的引用错误:module未定义
    在 isBuffer.js:6
(匿名) @ isBuffer.js:6
_nodeUtil.js:5 未捕获的引用错误:module未定义
    在 _nodeUtil.js:5
(匿名) @ _nodeUtil.js:5
_cloneBuffer.js:6 未捕获的引用错误:module未定义
    在 _cloneBuffer.js:6
(匿名) @ _cloneBuffer.js:6
saije$$bs.js:37 未捕获的引用错误:module$$home$$ga ** **********$node_modesl$immutable$$dist immutable.Map不是一个构造函数
    在 saije.js:37
0

评论由:mfikes

是的,一个问题(严格来说,可能是一个不同的问题,因为这个工单将被解决当我们最终升级到 Closure 的一个新版本),似乎在 {{debug}} 模块内部和顶层 {{debug}} 模块之间存在一些混淆。

0

评论由:mfikes

地图构造函数的问题似乎涉及到一个宿主对象包含了一个默认字段

`
cljs.user=> (let [Map (.-Map (.-default js/module$private tmp$cljs_2757$node_modules$immutable$dist$immutable))] (Map.))

对象[Map$$module$private $$tmp$cljs_2757$node_modules$immutable$dist$immutable Map {}]

`

0
参考: https://clojure.atlassian.net/browse/CLJS-2757(由mfikes报告)
...