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'], ['modulexis/plain-object', 'moduleimmutable', 'moduleslate_dev_logger', 'moduledirection', 'moduleesrever', 'moduledbg', 'modulelodash isEqual', 'modulelodash mergeWith', 'moduleslate_schema_violations', 'modulelodash pick', 'modulelodash omit', 'moduleis_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"
错误:未定义模块"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)


注意,它无法加载通过


goog.require("modulexis/plain-object");


在 {{out/node_modules/slate/lib/slate.es.js}} 中指定的 {{modulexis/plain-object}}。

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


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

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


这似乎是 Closure 无法找到模块的正确路径,并在 {{goog.require}} 中简单地发出 {{module$<symbol>}} 而不是 {{module$<path>}} 导致的问题。

8 答案

0

评论者:kommen

当前主分支产生了一个不同的问题。

这些错误现在已记录

找不到变量: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 的主分支,通过以下命令构建无阴影的 JAR:{{mvn -DskipTests -pl externs/pom.xml,pom-main.xml,pom-main-unshaded.xml}} 并依赖它使用

{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=使用快照 `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])
加载命名空间模块$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 未捕获的ReferenceError: process未定义
    at index.es.js:11
(匿名函数) @ index.es.js:11
index.es.js:5 未捕获的TypeError: module$home$garrett.tmp.node-modules$create_emotion.dist.index_es.default不是一个函数
    at 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 未捕获的TypeError: (0 , module$home$garrett.tmp.node_modules$slate.node_modules$debug.src$browser.default.load)不是一个函数
    at browser.js:15
(匿名函数) @ browser.js:15
isBuffer.js:6 未捕获的ReferenceError: module未定义
    at isBuffer.js:6
(匿名函数) @ isBuffer.js:6
_nodeUtil.js:5 未捕获的ReferenceError: module未定义
    at _nodeUtil.js:5
(匿名函数) @ _nodeUtil.js:5
_cloneBuffer.js:6 未捕获的ReferenceError: module未定义
    at _cloneBuffer.js:6
(匿名函数) @ _cloneBuffer.js:6
slate.es.js:37 未捕获的TypeError: module$home$garrett.tmp.node-modules$immutable.dist$immutable.Map不是一个构造函数
    at 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.))

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

`

0
...