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 投票

评论者: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 报告)
...