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

欢迎!请参阅关于页面了解如何使用本网站的一些更多信息。

0
ClojureScript
npm 依赖项 {{slate}} 依赖于 {{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$is_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$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"
Error: 模块 $is_plain_object 中未定义 nameToPath
     (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}},该模块是通过在 {{out/node_modules/slate/lib/slate.es.js}} 内部的以下方式指定的


goog.require("module$is plain_object");


进行加载的。

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


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

goog.require('module$private tmpl$ test-me$ node-modules$ is 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
by

评论者:mfikes

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

0
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
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])
load-namespace module$home$garrett,tmp$node-modules$emotion$dist$index-es , compiled: ([module$home$garrett美容师$tmp$node-modules$$emotion$unitless$dist$index-es module$$emotion$unitless module$$emotion$unitless$dist$index-es] [module$home$garrett美容师$$emotion$hash$dist$index-es module$$emotion$hash module$$emotion$hash$dist$index-es] [module$home$garrett美容师$$emotion$stylis$dist$index-es module$$emotion$stylis module$$emotion$stylis$dist$index-es] [module$home$garrett美容师$$node-modules$stylis 规则表单卡索引 module$arr 规则表单卡 module$arr$index] [module$home$garrett美容师$$node-modules$create-emotion$dist$index-es module$create-emotion module$create-emotion$dist$index-es] [module$home$garrett美容师$$node-modules$$emotion$memoize$dist$index-es module$$emotion$memoize module$$emotion$memoize$dist$index-es] (module$home$garrett美容师$$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美容师$$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美容师$$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美容师$$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美容师$$node-modules$stylis 规则表单卡索引', 'module$arr 规则表单卡', 'module$arr$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 Uncaught ReferenceError: process is not defined
    at index.es.js:11
(anonymous) @ index.es.js:11
index.es.js:5 Uncaught TypeError: module$home$garrett.tmp$node_modules.create_emotion.dist.index_es.default is not a function
    at 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 Uncaught TypeError: (0 , module$home$garrett.tmp$node_modules.slate.node_modules.debug.src.browser.default.load) is not a function
    at browser.js:15
(anonymous) @ browser.js:15
isBuffer.js:6 Uncaught ReferenceError: module is not defined
    at isBuffer.js:6
(anonymous) @ isBuffer.js:6
_nodeUtil.js:5 Uncaught ReferenceError: module is not defined
    at _nodeUtil.js:5
(anonymous) @ _nodeUtil.js:5
_cloneBuffer.js:6 Uncaught ReferenceError: module is not defined
    at _cloneBuffer.js:6
(anonymous) @ _cloneBuffer.js:6
slate.es.js:37 Uncaught TypeError: module$home$garrett.tmp$node_modules.immutable.dist.immutable.Map is not a constructor
    at slate.es.js:37
0

评论者:mfikes

是的,有一个问题(从严格意义上讲,这个问题可能在我们将最终迁移到更新版本的 Closure 时得到解决),似乎在 slate 模块树内嵌的 {{debug}} 模块和顶层 {{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
by
...