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

欢迎!请参阅关于页面了解如何工作的更多信息。

0 投票
ClojureScript
我正在尝试在我的CLJS代码(在这种情况下,[date-fns|https://github.com/date-fns/date-fns]), 中使用本地NPM模块,并在初次尝试监听时它正常工作,然而在后续的监听中,它失败了,以下是在我的控制台中出现的错误。


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`进行测试 - 我的`package.json`(由CLJS生成)看起来像这样


{
  "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 构建中... ... 完成。耗时3.674686404秒。监视路径:/Users/mfikes/Desktop/test-cljs-2440/src

这是使用版本1.9.908 {{cljs.jar}} 以及Node v9.11.1和npm 5.6.0结合的。

我也确认了在使用1.10.238 JAR时无法重现。

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

0 投票
参考: https://clojure.atlassian.net/browse/CLJS-2440 (由 alex+import 报告)
...