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

欢迎!有关如何使用本服务的更多信息,请参阅关于页面。

0
ClojureScript
我在尝试在我的CLJS代码中使用原生NPM模块(在这种情况下,是[date-fns|https://github.com/date-fns/date-fns]),并且在我第一次尝试watch时,它正常工作,但是在后续的watch操作中,我的控制台出现了以下错误


base.js:1357 Uncaught Error: Undefined nameToPath for date_fns
    at visitNode (base.js:1357)
    at Object.goog.writeScripts_ (base.js:1369)
    at Object.goog.require (base.js:706)
    at index.html:8


为了重现这个问题,我创建了一个构建脚本如下


(require '[cljs.build.api :as b])

(b/watch "src"
  {:main 'npm.core
   :output-to "out/npm.js"
   :output-dir "out"
   :npm-deps {:date-fns "1.29.0"}})


以及一个最小测试文件


(ns npm.core
  (:require [date-fns :as dfn]))

(def now (js/Date.))
(.write js/document "Today is " (dfn/format now "dddd"))


我还用本地`package.json`文件进行测试,而不是使用`install_deps true` - 由CLJS生成的我的`package.json`如下所示


{
  "dependencies": {
    "@cljs-oss/module-deps": "^1.1.1",
    "date-fns": "^1.29.0"
  }
}


当我运行


npm install
java -cp ../clojurescript/target/cljs.jar:src clojure.main watch.clj


一切正常,但是当我按下CTRL+C,再次运行完全相同的命令时,我会得到上述错误。

然而,只有当我删除`out`目录并第三次运行命令时,它才能再次正常工作。

请告诉我如果您需要其他详细信息。

5个答案

0

评论者:koz

抱歉,标题似乎搞错了,无法编辑。标题应该是“在 CLJS 源代码中重新运行 watch 并使用本地模块导致 JS 错误”

0

评论者:koz

环境信息补充

npm -v 5.5.1
node -v v8.4.0

0

评论者:andyparsons

注意到这个问题被调整为优先级4,但这个问题阻止我们完全使用npm依赖。较低的优先级反映了什么?

0

评论者:mfikes

我无法重现。在按下了Ctrl+C后重新运行,我得到以下结果

$ java -cp cljs.jar:src clojure.main watch.clj Building ... ... done. Elapsed 3.674686404 seconds Watching paths: /Users/mfikes/Desktop/test-cljs-2440/src

这是在自带的1.9.908 cljs.jar 以及 Node v9.11.1 和 npm 5.6.0 的环境下。

我也确认了在1.10.238 JAR中没有出现此类问题。

我还使用提交号{{ebdaf6c06c1112a67ba5a12498801c6d858e5a0a}}构建了1.9.968 JAR,并尝试重现失败。

0
参考:https://clojure.atlassian.net/browse/CLJS-2440 (-reported by alex+import)
...