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 评论道

attachment patch {{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 报告)
...