2

尝试使用 shadow-cljs 构建 Clojurescript 项目时出现此错误。我已经尝试查找此处描述的语法错误,但我可以通过单行和单次导入得到相同的错误,尽管并非所有导入都会导致相同的错误。

这编译:

(ns campfire.core)

(defn init [] (println "ok"))

这不会:

(ns campfire.core
  (:require ["bugout" :as b]))

(defn init [] (println "ok"))

上述示例的输出为:

shadow-cljs - config: /home/ru/Projects/campfire/shadow-cljs.edn
shadow-cljs - HTTP server available at http://localhost:3000
shadow-cljs - server version: 2.11.18 running at http://localhost:9630
shadow-cljs - nREPL server started on port 8777
shadow-cljs - watching build :frontend
[:frontend] Configuring build.
[:frontend] Compiling ...
[:frontend] Build failure:
The required JS dependency "readable-stream/writable.js" is not available, it was required by "node_modules/stream-browserify/index.js".

Dependency Trace:
        campfire/core.cljs
        node_modules/bugout/index.js
        node_modules/bs58check/index.js
        node_modules/create-hash/browser.js
        node_modules/cipher-base/index.js
        node_modules/stream-browserify/index.js

Searched for npm packages in:
        /home/ru/Projects/campfire/node_modules

See: https://shadow-cljs.github.io/docs/UsersGuide.html#npm-install

包.json

{
  "name": "campfire",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "build": "shadow-cljs release frontend"
  },
  "devDependencies": {
    "shadow-cljs": "2.11.18"
  },
  "dependencies": {
    "bugout": "^0.0.10",
    "webtorrent": "^0.114.1"
  }
}

shadow-cljs.edn

{:source-paths
 ["src/dev"
  "src/main"
  "src/test"]

 :dependencies
 []

 :dev-http {3000 "public"}
 :nrepl {:port 8777}
 :builds
 {:frontend
  {:target  :browser
   :modules {:main {:init-fn campfire.core/init}}}}}

我已经看到了类似的构建错误,这些错误通过清除 .shadow-cljs 等并重建来修复,但似乎没有任何帮助。我是影子新手,如果这是显而易见的事情,我深表歉意。有谁知道这里发生了什么?

更新

所以看起来正在发生的事情是stream-browserify 2.0.2需要readable stream ^2.0.2在嵌套的 node_modules 文件夹中安装哪个 npm 。其他地方readable-stream 3.6.0正在安装在顶级 node_modules 中。Shadow 正在尝试解决writer.js3.6.0 版本的可读流而不是 2.0.2 版本。

令人困惑的是,stream-browserify 不是依赖跟踪中给出的 cipher-base 的依赖,而是 node-libs-browser 的依赖,node-libs-browser 本身就是 shadow-cljs 的依赖。

这可能是阴影中的错误还是预期的行为?

更新 2

我创建了一个示例 repo,它尽可能简单地复制了我在这里看到的内容。

4

2 回答 2

1

你真的shadow-cljs在项目中安装了依赖项吗?目录是否node_modules/shadow-cljs存在?

我看到它在列表中列出,devDependencies因此应该安装它,但如果您从未真正npm install在项目中调用或npm设置为不会安装的生产模式,则可能不会devDependencies。所有这些都是node-libs-browser软件包的一部分,它似乎也丢失了,并且由于依赖于shadow-cljs.

于 2021-02-22T08:51:00.053 回答
0

根据您的第一条错误消息中的链接,它会说明npm install缺少的内容。

如果你没有运行npm install,它本身会安装你 package.json 中的内容。

如果这不是问题,那么npm i readable-stream可能会有所帮助。

于 2021-02-22T06:57:22.903 回答