在命名空间中找出 `:require` 的名称

Finding out the name to `:require` in a namespace

我正在学习本教程:https://practicalli.github.io/blog/posts/web-scraping-with-clojure-hacking-hacker-news/ 并且我很难处理 ns 宏的 :require 部分。本教程展示了如何使用名为 enlive 的库解析 HTML 并从中提取信息,要使用它,我首先必须将

   ...
  :dependencies [[org.clojure/clojure "1.10.1"]
                 [enlive "1.1.6"]]
   ...

在我的 project.clj 中,并要求 core.clj 中的库如下:

(ns myproject.core
  (:require [net.cgrand.enlive-html :as html])
  (:gen-class))

我花了很多时间才找到这个名字 net.cgrand.enlive-html,因为它与包名本身不同(就是 enlive),而且我无法通过任何方式找到它lein 命令(我最终通过谷歌搜索找到了它)。

我怎样才能轻松找到 require 的名称?

通常我从库的文档/教程中获取它。

https://github.com/cgrand/enlive 查看快速教程,它从所需的要求开始。

实用方法

如果您的 editor/IDE 有助于自动完成和 文档,这可能是第一条路线。

除此之外,图书馆通常有一些在线自述文件,他们在那里炫耀 他们做什么(需要什么,如何使用)。

严格方法

如果你真的对一个库一无所知,你会发现下载的 您 ~/.m2/repository 目录中的库。请注意 deps 没有命名 "group/artifact" 的约定只会在工件名称上加倍,接下来是 版本。所以你可以在这里找到你的库 JAR 文件: .m2/repository/enlive/enlive/1.1.6/enlive-1.1.6.jar.

JAR 文件只是 ZIP 文件。在 JAR 文件中,您通常会发现 库的源文件。目录结构反映了包 结构体。例如。一个文件有 net/cgrand/enlive_html.clj (注意使用 _ 而不是 -,这是由于 JVM 的名称修改)。然后是你 可以在您的 REPL 中要求该文件并使用 docdir 等进行探索。或者您 打开此文件,查看一大块的文档和源代码。