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) 可能也会以某种方式破坏 shim,因此最好将这些更改一起提交,并对将破坏什么等问题有明确的说明。只要我们提供健壮和可预测的实现,我认为这是值得破坏的。

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

0 投票
by

评论由:dnolen 提出

是的,在继续前行之前,我想从已经在 ClojureScript + Node.js 上大量投资的群体中获取反馈。

0 投票
by

评论者: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 投票
by

评论由:mfikes 提出

补丁不再适用。

0 投票
by
参考:https://clojure.atlassian.net/browse/CLJS-1466(由 bensu 提出)
...