5초 만에 완성되는 클로저 프로젝트!

새로운 Clojure 프로젝트를 시작할 때마다 추가해야 하는 상용구가 많이 있습니다.
  • deps.edn 테스트를 실행하고 작업을 빌드하기 위한 별칭 포함
  • build.clj 빌드 작업 포함
  • .gitignore
  • README.md
  • 당신이 이름을 ...

  • 이러한 모든 생성은 deps-new을 사용하여 쉽게 자동화할 수 있습니다.

    deps-new 설치


    deps-new는 Clojure CLI용 "도구"로 설치하기 위한 것입니다.

    Clojure CLI의 "도구"



    도구는 설치할 수 있고 clj -T 옵션을 사용하여 Clojure CLI에서 호출할 수 있는 타사 라이브러리입니다. 이들은 자체 클래스 경로를 사용하며 프로젝트 디렉토리에서 도구 명령을 실행하는 경우 프로젝트deps.edn를 방해하지 않습니다.

    필요할 수 있는 몇 가지 명령:
    clj -Ttools list - 이미 설치된 도구 보기
    clj -Ttools remove :tool tool-name - 도구 제거
    clj -Ttools install tool-path tool-version :as tool-name - 새 도구 설치

    에서 찾을 수 있는 도구에 대한 자세한 정보.

    deps-new 도구 설치



    다음은 시스템에 deps-new를 추가하는 명령입니다.

    clojure -Ttools install io.github.seancorfield/deps-new '{:git/tag "v0.4.13"}' :as new
    

    :as new 명령의 일부는 "new"가 이제 시스템에 있는 deps-new 도구의 이름임을 의미합니다. 원하는 이름을 사용할 수 있습니다.

    지금 도구 목록을 확인하겠습니다.

    $ clj -Ttools list
    TOOL   LIB                              TYPE  VERSION
    new    io.github.seancorfield/deps-new  :git  v0.4.13
    tools  io.github.clojure/tools.tools    :git  v0.2.8
    


    어떤 기능new 도구가 노출하는지 확인하려면 다음 명령을 실행할 수 있습니다.
    clojure -A:deps -Tnew help/doc

    라이브러리 만들기



    이제 deps-new가 설치되면 이를 사용하여 새 라이브러리를 만들 수 있습니다.

    다음 명령은 루트 네임스페이스vkjr와 그 안에 하나의 소스 파일mycoollib.clj이 있는 라이브러리를 생성합니다.

    $ clojure -Tnew lib :name vkjr/mycoollib
      Creating project from org.corfield.new/lib in mycoollib
    


    새 라이브러리의 내용은 다음과 같습니다.

    mycoollib
    ├── .gitignore
    ├── CHANGELOG.md
    ├── LICENSE
    ├── README.md
    ├── build.clj
    ├── deps.edn
    ├── doc
    │   └── intro.md
    ├── pom.xml
    ├── resources
    │   └── .keep
    ├── src
    │   └── vkjr
    │       └── mycoollib.clj
    └── test
        └── vkjr
            └── mycoollib_test.clj
    


    라이브러리의 최상위 디렉토리도 이름이 지정되었지만mycoollib 라이브러리 생성 명령에 추가 키/값 쌍을 제공하여 이 동작을 재정의할 수 있습니다:target-dir some-folder-name.

    생성된 라이브러리의 내용



    보시다시피 새 라이브러리에는 자동으로 생성된 파일이 많이 있습니다.
    deps.edn 처음부터 테스트 및 빌드 작업에 대한 별칭이 포함되어 있습니다.

    {:paths ["src" "resources"]
     :deps {org.clojure/clojure {:mvn/version "1.11.1"}}
     :aliases
     {:test
      {:extra-paths ["test"]
       :extra-deps {org.clojure/test.check {:mvn/version "1.1.1"}
                    io.github.cognitect-labs/test-runner
                    {:git/tag "v0.5.1" :git/sha "dfb30dd"}}}
      :build {:deps {io.github.seancorfield/build-clj
                     {:git/tag "v0.8.2" :git/sha "0ffdb4c"}}
              :ns-default build}}}
    

    src/vkjr/mycoollib.clj 더미 기능 포함

    (ns vkjr.mycoollib)
    
    (defn foo
      "I don't do a whole lot."
      [x]
      (prn x "Hello, World!"))
    


    그리고 test/vkjr/mycoollib_test.clj에는 이미 하나의 실패한 테스트가 있습니다.

    (ns vkjr.mycoollib-test
      (:require [clojure.test :refer :all]
                [vkjr.mycoollib :refer :all]))
    
    (deftest a-test
      (testing "FIXME, I fail."
        (is (= 0 1))))
    

    build.clj 빌드 작업 포함 test , ci , installdeploy
    (ns build
      (:refer-clojure :exclude [test])
      (:require [clojure.tools.build.api :as b] ; for b/git-count-revs
                [org.corfield.build :as bb]))
    
    (def lib 'net.clojars.vkjr/mycoollib)
    (def version "0.1.0-SNAPSHOT")
    #_ ; alternatively, use MAJOR.MINOR.COMMITS:
    (def version (format "1.0.%s" (b/git-count-revs nil)))
    
    (defn test "Run the tests." [opts]
      (bb/run-tests opts))
    
    (defn ci "Run the CI pipeline of tests (and build the JAR)." [opts]
      (-> opts
          (assoc :lib lib :version version)
          (bb/run-tests)
          (bb/clean)
          (bb/jar)))
    
    (defn install "Install the JAR locally." [opts]
      (-> opts
          (assoc :lib lib :version version)
          (bb/install)))
    
    (defn deploy "Deploy the JAR to Clojars." [opts]
      (-> opts
          (assoc :lib lib :version version)
          (bb/deploy)))
    

    build.clj는 표준 Clojure의 tools.build 대신 build-clj 라이브러리를 사용하여 작업을 구현합니다. 해당 라이브러리는 일부 불필요한 세부 정보를 숨기고 Clojars에 배포하는 기능을 제공합니다. 이 기능은 tools.build에서 누락되었습니다.

    다른 유용한 파일도 많이 있습니다.

    애플리케이션 만들기



    라이브러리만큼 간단한 .gitignore를 사용하여 애플리케이션 만들기:

    $ clojure -Tnew app :name vkjr/mycoolapp
    Creating project from org.corfield.new/app in mycoolapp
    


    다음은 폴더 구조입니다.

    mycoolapp
    ├── .gitignore
    ├── CHANGELOG.md
    ├── LICENSE
    ├── README.md
    ├── build.clj
    ├── deps.edn
    ├── doc
    │   └── intro.md
    ├── pom.xml
    ├── resources
    │   └── .keep
    ├── src
    │   └── vkjr
    │       └── mycoolapp.clj
    └── test
        └── vkjr
            └── mycoolapp_test.clj
    


    도서관 프로젝트와의 주요 차이점:
    README.md에는 pom.xmlLICENSE 함수가 포함되어 있습니다.

    (ns vkjr.mycoolapp
      (:gen-class))
    
    (defn greet
      "Callable entry point to the application."
      [data]
      (println (str "Hello, " (or (:name data) "World") "!")))
    
    (defn -main
      "I don't do a whole lot ... yet."
      [& args]
      (greet {:name (first args)}))
    

    deps-new에는 각각 (main) 및 (greet) 함수를 실행하기 위한 추가 별칭src/vkjr/mycoolapp.clj(-main)이 있습니다.

    ...
    {:run-m {:main-opts ["-m" "vkjr.mycoolapp"]}
     :run-x {:ns-default vkjr.mycoolapp
             :exec-fn greet
             :exec-args {:name "Clojure"}}
    ...
    }
    

    (greet) jar 대신 uberjar를 생성하며 (설치) 및 (배포) 기능이 없습니다.

    ...
    (defn ci "Run the CI pipeline of tests (and build the uberjar)." [opts]
      (-> opts
          (assoc :lib lib :version version :main main)
          (bb/run-tests)
          (bb/clean)
          (bb/uber)))
    


    최소한의 "스크래치" 프로젝트 만들기



    완전한 응용 프로그램이 필요하지 않고 단지 놀이터만 필요한 경우deps.edn는 "스크래치"프로젝트 생성을 지원합니다.

    $ clojure -Tnew scratch :name playground                                            
    Creating project from org.corfield.new/scratch in playground 
    


    이러한 "스크래치"의 폴더 구조:

    playground
    ├── deps.edn
    └── src
        └── scratch.clj
    


    거의 비어 있는 run-mrun-x, (-main) 및 (greet) 기능 포함, 애플리케이션 예제에서와 같이
    build.clj를 사용하여 자신만의 프로젝트 템플릿을 만들 수 있지만 이것은 또 다른 이야기입니다… ;)

    kozieiev.com에 원래 게시됨

    좋은 웹페이지 즐겨찾기