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

欢迎!有关如何运作的更多信息,请参阅关于 页面。

0
ClojureScript
当编译以下脚本的一个简单[示例|[example|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 ClojureScript:none shim中解析之前检查提供的:output-dir路径是否为绝对路径。该shim在CLJS-1444中有一个相关的ticket。

尽管对用户而言拥有绝对路径并不常见,但是工具可能需要这样做。

6 答案

0

评论者:bensu

通过使用{{path.resolve}}解决了这个问题,该函数在连接路径时会考虑相对路径和绝对路径。在包含相对和绝对{{:output-dir}}的示例存储库中已成功测试。

0

评论者:martinklepsch

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

CLJS-1444(链接:1)可能会以某种方式破坏shim,因此最好将这些补丁一起进行,并非常清楚地说明将会破坏什么等。只要我们提出一个健壮且可预测的实现,这在个人看来是值得打破的。

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

0
by

评论由:dnolen 发布

在进一步推进此项目之前,希望从已经在 ClojureScript + Node.js 上大量投入的人那里得到反馈。

0
by

评论者:bensu

(链接:~martinklepsch):我已经考虑过可能会出现的问题,但我没有找到任何例子。你有没有什么示例?在https://github.com/bensu/node-abs-ticket (文本:example repo)中,我编写了一些测试(通过运行 {{./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
by

评论由:mfikes 发布

补丁不再适用。

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