【问题标题】:The required JS dependency "readable-stream/writable.js" is not available, it was required by "node_modules/stream-browserify/index.js"所需的 JS 依赖项“readable-stream/writable.js”不可用,它是“node_modules/stream-browserify/index.js”所需的
【发布时间】:2021-02-22 03:50:43
【问题描述】:

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

这样编译:

(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

package.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 需要 npm 安装在嵌套的 node_modules 文件夹中的 readable stream ^2.0.2。在其他地方 readable-stream 3.6.0 正在安装在顶级 node_modules 中。 Shadow 正在尝试针对 3.6.0 版本的可读流而不是 2.0.2 版本解析 writer.js

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

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

更新 2

我创建了一个示例 repo,它尽可能简单地复制了我所看到的 here

【问题讨论】:

    标签: clojurescript shadow-cljs


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢托马斯。可以确认 shadow-cljs 和 node-libs-browser 都安装了,并且它们的文件夹存在于 node_modules 下。
    • 那是在/home/ru/Projects/campfire/node_modules 目录中吗?我刚刚测试过,lib 对我来说编译得很好。
    • 当然,这两个包都在项目根节点模块中。如果有帮助,我刚刚创建了一个在github 上复制该问题的存储库。
    • 问题在于readable-stream 依赖的依赖冲突。 3.6.0 已安装,但 stream-browserify 想要 ^2.0.2。您已经确定了。您可以检查是否有更新的 stream-browserify 或者其他库是否也适用于旧版本。只需将旧版本的直接依赖项添加到您的项目中即可进行测试。
    • 啊,好吧,我认为并排放置同一模块的不同版本是可以的。我尝试强制使用 2.0.2 版本,一切似乎都正常。感谢您的帮助和您在阴影方面的工作。这是一个了不起的工具包。
    【解决方案2】:

    基于the link in your first error message,它会告诉npm install 缺少什么。

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

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

    【讨论】:

    • 嗨,阿伦,谢谢。我已经尝试了这两种方法并对其进行了重建,但我得到了相同的信息。我可以在node_modules 文件夹中看到readable-stream ,但引用的文件(writable.js)不存在。我在可读流存储库中看不到任何具有该名称的文件,因此看起来导入在某处被错误地解析。
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2021-01-23
    • 2019-05-28
    相关资源
    最近更新 更多