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

欢迎!请参阅 关于 页面以获取有关如何工作的更多信息。

0
ClojureScript
The {{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)
load-namespace module$private$tmp$test-me$node-modules$slate$lib$slate-es , compiled: ((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$ матеріalis/plain_object', 'module$immutable', 'module$slate_dev_logger', 'module$direction', 'module$esrever', 'module$debug', 'module$lodash/isEqual', 'module$lodash/mergeWith', 'module$slate_schema_violations', 'module$lodash/pick', 'module$lodash/omit', 'module$ материalis/plain_object']);

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"
Error: Undefined nameToPath for module$ materiale/plain_object
     (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$物料/plain_object}},这是通过


goog.require("module$实物/plain_object");


在出局的 {{出/node_modules/slate/lib/slate.es.js}} 中指定的。

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


cljs.user=> (require 'is-plain-object)
load-namespace module$private$-金刚tmp$test-me$node-modules$-物体/plain$object>index , compiled: ([module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index] (module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index))
goog.addDependency("../node_modules/isobject/index.js", ['module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index'], []);
goog.addDependency("../node_modules/is-plain-object/index.js", ['module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index'], ['module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index']);

goog.require('module$private$金刚tmp$test-me$node-modules$-物体/plain$object>index');
null;


这似乎是由于 Closure 未找到模块的正确路径,并且在对于 {{goog.require}} 简单地发射 {{module$<符号>}} 而不是 {{module$<路径>}} 而导致的错误问题。

8 答案

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
_评论由:mfikes_

使用当前的Closure Compiler的master版,通过{{mvn -DskipTests -pl externs/pom.xml,pom-main.xml,pom-main-unshaded.xml}}构建未阴影的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
_评论由:jumblemuddle_

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

{code:|title=启动带有快照的REPL `closure-compiler-unshaded`}
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])
加载命名空间模块$home$garrett$tmp$node-modules$emotion$dist$index-es,已编译:([module$home$garrett$$tmp$node-modules$$emotion$unitless$dist$index-es module$$emotion$unitless module$$emotion$unitless$dist$index-es] [module$home$garrett$$tmp$node-modules$$emotion$hash$dist$index-es module$$emotion$hash module$$emotion$hash$dist$index-es] [module$home$garrett$$tmp$node-modules$$emotion$stylis$dist$index-es module$$emotion$stylis module$$emotion$stylis$dist$index-es] [module$home$garrett$$tmp$node-modules$stylis-rule-sheet$index module$stylis-rule-sheet module$stylis-rule-sheet$index] [module$home$garrett$$tmp$node-modules$create-emotion$dist$index-es module$create-emotion module$create-emotion$dist$index-es] [module$home$garrett$$tmp$node-modules$$emotion$memoize$dist$index-es module$$emotion$memoize module$$emotion$memoize$dist$index-es] (module$home$garrett$$tmp$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$$tmp$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$$tmp$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$$tmp$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$$tmp$node_modules$stylis_rule_sheet$index', 'module$stylis_rule_sheet', 'module$stylis_rule_sheet$index'], []);
goog.addDependency("../node_modules/create-emotion/dist/index.es.js", ['module$home$garrett$$tmp$node_modules$create_emotion$dist$index_es', 'module$create_emotion', 'module$create_emotion$dist$index_es'], ['module$$emotion$memoize', 'module$$emotion$unitless', 'module$$emotion$hash', 'module$$emotion$stylis', 'module$stylis_rule_sheet']);
goog.addDependency("../node_modules/@emotion/memoize/dist/index.es.js", ['module$home$garrett$$tmp$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$$tmp$node_modules$emotion$dist$index_es', 'module$emotion', 'module$emotion$dist$index_es'], ['module$create_emotion']);

goog.require('module$home$garrett$$tmp$node_modules$emotion$dist$index_es');
null;

{code:title=浏览器控制台错误}
index.es.js:11 未捕获引用错误:process 没有定义
    在 index.es.js:11
(匿名) @ index.es.js:11
index.es.js:5 未捕获类型错误:module$home$garrett$$tmp$node_modules$create_emotion$dist$index_es.default 不是一个函数
    在 index.es.js:5
0
by
_评论由:jumblemuddle_

关于 `slate`,也存在浏览器控制台错误。
{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" "slate" "0.33.6" "immutable" "3.8.2"} :install-deps true}' -d out -r
ClojureScript 1.10.339
cljs.user=> (require '[slate])

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


{code:|title=浏览器控制台错误}
browser.js:15 未捕获类型错误:(0 , module$home$garrett$$tmp$node_modules$slate$node_modules$debug$src$browser.default.load) 不是一个函数
    在 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
slate.es.js:37 未捕获类型错误:module$home$garrett$$tmp$node_modules$immutable$dist$immutable.Map 是不是一个构造函数
    在 slate.es.js:37
0
by

评论由:mfikes

是的,有一个问题(严格来说,可能是一个不同的问题,因为当我们最终迁移到更新的Closure版本时,这个工单将得到解决),似乎{{debug}}模块内部存在一些混淆,该模块位于{{slate}}模块树内部,以及顶级{{debug}}模块。

0

评论由:mfikes

Map构造函数的问题似乎是与包含默认字段的宿主对象有关

`
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报告)
...