请分享您的想法,参加2024 Clojure 状态调查!

欢迎!请查看关于页面,了解其工作原理的更多信息。

0
ClojureScript
当使用以下脚本编译一个简单的[示例|https://github.com/bensu/node-abs-ticket]


(require 'cljs.build.api)

(cljs.build.api/build "src"
  {:main 'hello.core
   :output-to "main.js"
   :output-dir "/home/carlos/Playground/node-abs/out"
   :target :nodejs})


它生成的代码尝试解析以下路径


/home/carlos/Playground/node-abs/home/carlos/Playground/node-abs/out/goog/bootstrap/nodejs.js


在 Node.js {{:none}} 隧道中解析之前,我们应该检查提供的 {{:output-dir}} 路径是否为绝对路径。该隧道在 CLJS-1444 中有一个相关的条目。

尽管用户具有绝对路径的情况不常见,但工具可能需要这样做。

6 答案

0

评论者:bensu

附加的补丁 {{cljs_1466.patch}} 通过使用 {{path.resolve}} 解决了问题,该函数在连接路径时考虑了相对和绝对路径。在示例仓库中,使用相对和绝对 {{:output-dir}} 成功测试通过。

0

评论者:martinklepsch

看起来补丁可能在某些情况下会破坏当前的行为?您考虑过这个吗?

CLJS-1444(链接:1)可能会导致某种方式下破坏shim,因此最好一起调整并且清楚地说明哪些内容会受到影响。只要我们提出一个强大且可预测的实现,我认为这一点是值得破坏的。

(链接:1)http://dev.clojure.org/jira/browse/CLJS-1444 关于

0

评论者:dnolen

是的,希望在继续前进之前,先得到那些在ClojureScript + Node.js上投入了大量精力的人的反馈。

0

评论者:bensu

(链接:~martinklepsch):我也考虑过破坏性,但是我找不到任何案例。你有没有例子?在(链接:https://github.com/bensu/node-abs-ticket 文本:示例仓库)中,我已经准备了一些测试(通过运行 {{./script/test.sh}}),但是所有相对路径都归结为 {{path.join(path.resolve("."),paths)}} 等于 {{path.resolve(paths)}},因为对于两种情况({{process.cwd()}} 在 {{path.resolve}} 内部),“解析为绝对路径”的方法是相同的。在考虑绝对路径时,只有新版本才会做正确的事情。

另一方面,这些测试还显示,我最初认为提出的补丁并没有涵盖 CLJS-1446,因为

node main.js

成功,而

cd .. node node-abs/main.js

失败。

0

评论者:mfikes

补丁不再适用。

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