tl; dr : scalajs-java-time과 같은 라이브러리가 종속성을 대체하는 방법은 무엇입니까?Scala.js 플랫폼 의존 메소드 구현 (또는 종속성 삽입)
object Example {
def method(...) = { ... dependsOnPlatform ... }
val dependsOnPlatform = ???
}
이 일의 순진 방법은 다음과 같습니다 :
이val dependsOnPlatform = if(onJS) jsImplementation else jvmImplementaion
문제는 공유 코드에서
:
나는 Scala.js이 의존성 주입에 달렸다 Scala.js 클래스에 의존하기 때문에 종종 JVM을 위해 jsImplementation
을 컴파일 할 수 없습니다. 리플렉션을 사용하거나 자바 클래스를 참조하는 경우 jvmImplementaion
의 fastOptJS
을 완료하지 못할 수도 있습니다.
object Example
은 정적이어야하며 생성자 삽입을 사용할 수 없습니다.
리플렉션을 사용하면 문제를 쉽게 해결할 수 있지만 다시 Scala.js에서는 허용되지 않습니다.
부작용으로 해결 될 수도 있지만 개체가 정적이어서 취약합니다.
종속성은 method
의 암시 적 매개 변수 일 수 있지만 추가 가져 오기가 필요합니다.
그리고 이것은 매크로가 빌드 프로세스를 복잡하게하지 않고 해결할 수있는 문제가 아닙니다.
그래, 난 그냥 그림자 프로젝트가 잘못 CrossProject 빌드를 디버깅하는 동안 알게되었습니다. 내가 놓친 것은 공유 코드가 별도로 컴파일 할 필요가 없다는 것입니다. 이 CrossProject 시스템에 대해 혼란 스러울 정도의 비난을 많이합니다. 마지막으로 소스 코드를 읽었을 때 설치가 얼마나 단순한 지 분명 해졌다. – acdenh