分享您的想法,请参加 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}} Shim 中解析之前,检查提供的 {{:output-dir}} 路径是否为绝对路径。Shim 在 CLJS-1444 中有一个相关票。

即使用户使用绝对路径不是很常见,工具可能也需要。

6 个答案

0

评论者:bensu

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

0

评论者:martinklepsch

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

CLJS-1444 (链接:1) 也会以某种方式破坏当前的行为,所以最好将其放在一起,并且关于会破坏什么等问题要非常清楚。只要我们提出了健壮且可预测的实现,我认为这是值得破坏的事情。

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

0

评论者:dnolen

希望在向ClojureScript + Node.js用户群广泛征求意见后再就此事采取行动。

0

评论者:bensu

(链接:~martinklepsch):我曾想过它会破坏某些东西,但我找不到任何案例。你有例子吗?在(link: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 报告)
...