: 사용자 프로파일의 설정이 항목의 설정을 덮어씁니다.clj
4290 단어 leiningen
묘사
코드(let [p (merge-profiles
(with-meta {} {:without-profiles {:key "project.clj"}
:profiles {:user {:key "user"}}})
[:user])]
(pprint p)
(println "---------------")
(pprint (meta p)))
이것을 인쇄하려면 다음과 같이 하십시오.{:key "user"}
---------------
{:excluded-profiles (),
:included-profiles (:user),
:active-profiles [:user],
:profiles {:user {:key "user"}},
:without-profiles {:key "project.clj"}}
그러나 사용자 프로필의 값이 :without-profiles
의 값을 덮어쓰는 것은 잘못된 것 같습니다.이게 벌레야?토론 #1
변화가 테스트를 깨뜨렸기 때문에 나는 그것을 회복했다.profiles.clj
의 기본값 덮어쓰기project.clj
에 설정된 특정 값은 의미가 없기 때문에 이 문제를 조사해야 한다.토론 #2
잘 모르겠어요.내가 보기에, 그것은 지금 예상대로 일하고 있다.병합:user
프로파일은 해당 프로파일의 값을 우선시해야 합니다.토론 #셋
현재 프로젝트의 설정보다 우선순위가 높습니다.clj, 상식적 기대와 일반적인 관례를 반대합니다.기본 설정과 기본 설정에 현시적으로 적용되는 설정 파일 사이에는 차이가 있어야 합니다.나는 두 가지 건의가 있다.1.
:default
단면 벡터를 하나의 특례로 하고 이를 배경으로 하여 기타 모든 내용을 적용한다.2. 프로필과
:without-profiles
의 의미를 통일시켜 다른 프로필로 만든다. 이름은 :project
이고 :default
벡터 중:active-profiles
에 위치한다.방법분명히 더 급진적이지만, 전체 코드가 줄어들고, 더욱 뚜렷하고 명확한 규칙이 생겨서 효과적인 프로젝트 맵을 내보낼 것이다.
토론 #4
이 문제를 더욱 실질적으로 하기 위해 우리는 시작할 때(project/init-profiles [:default])
그 중에서 :default
는 벡터[:base :system :user :provided :dev]
로 해석되었다.나의 최초의 예는 merge-profiles
와 관련이 있는데, 그것은 기본적으로 init-profiles
와 set-profiles
위의 편의 함수이다.이 문제는 반드시 상술한 어떤 기능과 관련이 있는 것이 아니라
project.clj
의 설정을 사용자 등급과 시스템 등급의 기본값과 통합시키는 데 대한 보다 광범위한 의미이다. 현재 이러한 기본값은 일반적인 설정 파일로 적절하게 나타난다.겸사겸사 한마디
merge-profiles
는 사실상 단어가 부적절한 단어로 activate-profiles
로 묘사하는 것이 가장 좋다.unmerge-profiles
와 마찬가지로 실제로deactivate-profiles
.토론 #5
미안해요. 진정한 문제가 뭔지 모르겠어요.프로젝트보다 사용자 프로파일을 우선시킵니다.clj는 디자인을 거쳤습니다. 왜냐하면 때때로 당신이 종사하는 모든 프로젝트의 주어진 설정을 덮어쓰고 싶을 때가 있습니다.예를 들어:eval-in :nrepl
또는 운영 체제별 일부 설정나는
merge-profiles
더 좋은 이름을 사용할 수 있다는 것에 동의하지만, 우리는 지금 그것을 바꿀 수 없다.그렇게 지도 모른다, 아마, 아마...토론 #6
네, 몰라요. 하지만 기본값을 설정하고 싶어요. 우선순위가project.clj
보다 낮아요.예를 들어 :repl-options {:port 4001}
는 전역 기본값이 되지만 프로젝트가 특정 값을 사용하는 경우 이 값을 준수하십시오.:user
프로필 외에 시스템 범위 내의 기본 설정도 있기 때문에 최소한 이 설정들은 project.clj
을 초과하지 않기를 바랍니다.토론 #7
마스터의 현재repl.clj
코드를 보면 같은 예상 행위의 증거를 볼 수 있습니다. 비록 그것이 잘못된 것일지라도:(defn- repl-port [project]
(Integer. (or (System/getenv "LEIN_REPL_PORT")
(-> project :repl-options :port)
(-> (user/profiles) :user :repl-options :port)
0)))
(-> project :repl-options :port)
에서 검색한 유효한 값이 :user
프로필 설정을 project.clj
프로필 설정에 적용했기 때문에 작업을 할 수 없습니다.토론 #8
이 문제를 한층 더 생각하면 대부분의 경우project.clj
는 profiles.clj
보다 전국적이고 통용성이 있다. 왜냐하면 이것은 모든 개발자가 공유하는 부품이기 때문이다.따라서 사용자 프로필 트럼프project.clj
를 보유하는 것은 자연스럽다.그러나 이것은 내가 profiles.clj
를 통해 설정한 모든 항목에 대한 설정을 설정할 방법이 없다는 것을 의미한다. 아니면 내가 이 방면에서 틀렸는가?다른 점은
:repl
의 profiles.clj
프로필의 우선순위가 :repl
의 project.clj
프로필보다 낮기 때문에 우리는 상반된 행동을 얻었다.이것도 일부러 그런 거예요?토론 #9
this also means that I have no means at all to configure a per-project setting for anything I have configured through profiles.clj
체크 인되지 않은
profiles.clj
파일을 프로젝트 루트 디렉토리에 넣을 수 있습니다.그러나 이 설정 파일을 자동으로 적용하려면 :dev
이 필요합니다. 이것은 :dev
에 숨겨져 있는 project.clj
을 의미합니다. 존재한다면.대부분의 경우
:user
와 함께 ^:displace
프로필에 넣으면 작용하지만 숫자와는 작용하지 않는다. 왜냐하면 메타데이터를 추가할 수 없기 때문이다.나는 우리가 3.0의 전체 개요 문서를 다시 써서 실현하지 않으면 이 문제를 해결할 수 있다고 생각하지 않는다.
Reference
이 문제에 관하여(: 사용자 프로파일의 설정이 항목의 설정을 덮어씁니다.clj), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/technomancy/leiningen/issues/1128텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)