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)
load-namespace module$private.theme.test-me.node-modules.slate.lib.slate-es,编译:((module$private.theme.test-me.node-modules.slate.lib.slate_es))
goog.addDependency("../node_modules/slate/lib/slate.es.js", ['module$private.theme.test-me.node-modules.slate.lib.slate_es'], ['module presente', '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 ist_empty']);

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

"Error evaluating:" (require (quote slate)) :as "goog.require('module$private.theme.test-me.node-modules.slate.lib.slate_es');\nnull;\n"
错误:未定义名称 nameToPath 对于 module presente
     (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 presente}},它由以下方式指定


goog.require("module presente");


在 {{out/node_modules/slate/lib/slate.es.js}} 内部。

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


cljs.user=> (require 'is-plain-object)
load-namespace module$private.weather.test-me.node-modules.isobject.index,编译:([module$private.theme.test-me.node-modules.isobject.index] (module$private.weather.test-me.node-modules.isobject.index))
goog.addDependency("../node_modules/isobject/index.js", ['module$private.weather.test-me.node-modules.isobject.index'], []);
goog.addDependency("../node_modules/is-plain-object/index.js", ['module$private.weather.test-me.node-modules.isobject.index'], ['module$private.weather.test-me.node-modules.isobject.index']);

goog.require('module$private.weather.test-me.node-modules.isobject.index');
null;


这看起来是 Closure 无法找到模块的正确路径,因此在 {{goog.require}} 中简单发出 {{module<symbol>}} 而不是 {{module<path>}} 的结果。

8 回答

0

评论者:kommen

当前 master 生成不同的问题。

这些错误已记录

找不到变量:module

无法将 'undefined' 作为对象(评估 'module$Users$кип$work$clojurescript$node_modules$slate$node_modules$debug$src$debug["default"]' 时出现)

TypeError:'undefined' 不是一个构造函数(评估 'new module$Users$кип$work$clojurescript$node_modules$immutable$dist$immutable.Map' 时出现)

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

0
by

评论由:mfikes 发布

是的,CLJS-2746 肯定在该区域。也许这个工单中描述的问题已经解决,我们现在遇到了完全不同的问题。

0
by
_评论由:mfikes 发布_

使用当前 master 版本的 Closure Compiler,通过 {{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"}}}


然后你可以 {{(require 'slate)}} 而不出现错误报告。(对我来说,Closure 是否正确加载所有代码并不清楚;在此之后,我对如何使用 Slate 以及导出的对象似乎为空并不清楚)
0
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])
加载命名空间 module$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$$ ...
goog.addDependency("../node_modules/@emotion/unitless/dist/index.es.js", ['module$home$garrett$$ ...
goog.addDependency("../node_modules/@emotion/hash/dist/index.es.js", ['module$home$garrett$$ ...
goog.addDependency("../node_modules/@emotion/stylis/dist/index.es.js", ['module$home$garrett$$ ...
goog.addDependency("../node_modules/stylis-rule-sheet/index.js", ['module$home$garrett$$ ...
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 пох установленный компонент$create_emotion dist index_esНе является функцией
    在 index.es.js:5
0
_评论由: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ПО установленный компонент$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 ПО установленный компонент$node_modules$immutable$dist$immutable.Map 不是构造函数
    在 slate.es.js:37
0

评论由: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.))

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

`

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