2016-06-30 2 views
2

NODE_PATH 환경 변수를 사용하여 대체 모듈 폴더를 지정할 수 있습니다. 이것은 상대적으로 긴 경로를 막는 데 유용 할 수 있습니다. 내가 Folder2 폴더에서 내가 import { ServiceName } from "../folder1/service"을 할 필요가 util을에 폴더 1에서 서비스를 사용하려면typescript는 NODE_PATH 변수를 무시합니다.

/index.ts 
/src/ 
---/folder1/ 
------/service.ts 
---/folder2/ 
------/util.ts 

: 다음과 같은 폴더 구조를 상상해보십시오. 깊이 중첩 된 폴더에서는 지루할 수 있습니다.

NODE_PATH 환경 변수를 './src'로 설정하면 "folder1/service"에서 동일한 서비스를 가져올 수 있습니다. 보시다시피, 귀찮은 상대 경로는 없습니다.

나는 이것을 일반 자바 스크립트 프로젝트와 함께 테스트 해봤는데 잘 동작한다. 그러나 typescript를 사용할 때 NODE_PATH 값을 사용하지 않는 것 같아서 지정된 모듈을 찾을 수 없다는 컴파일 오류가 발생합니다.

문제는, typescript 컴파일러가 NODE_PATH 값을 사용하도록 강제 설정하려면 어떻게해야합니까?

답변

1

두 개의 모듈 이름은 근본적으로 다릅니다. 하나는 상대 ("../folder1/service")이고 하나는 아닙니다 ("folder1/service")입니다. TypeScript는 상대 모듈과 비 상대 모듈을 완전히 분리하여 처리합니다. 자세한 내용은 문서에서 module resolution을 살펴보십시오.

이 문제를 해결하는 한 가지 방법은 모듈 해상도 전략을 '클래식'으로 설정하는 것일 수 있습니다. 즉, "folder1/service"가 현재 디렉토리에서 검색되고 (아무 것도 찾지 않음) 다음으로 이동해야합니다. 위의 디렉토리 (일치하는 곳). 이것은 일반적으로 질문에 대답하지 않습니다. 작동하지 않는 다른 NODE_PATH 옵션을 생각해 낼 수 있고, '노드'스타일 모듈 해상도에 의존하는 장소가 손상 될 수 있습니다. 원칙적으로 그것은 당신의 특정 문제를 해결할 것입니다.

그렇지 않으면 지금 당장이 작업을 수행하는 데 올바른 답변이 없습니다. TypeScript 2.0이 착륙 할 예정이지만 (예 : 오늘은 인 6 월말에 계획 됨) path mappingvirtual root directories이 포함됩니다. 이 옵션은 tsconfig.json에 추가 할 수있는 구성 옵션으로, 모듈 조회를 위해 임의로 한 경로를 다른 경로로 매핑 할 수 있습니다. 이렇게하면 컴파일 설정에 NODE_PATH 매핑을 복제 할 수 있고 모든 것이 제대로 작동해야합니다.

지금 당장 당신의 문제를 해결할 수 없다는 것을 알고 있습니다. 미안하지만 앞으로 2.0 주가 될 때쯤에는 문제가 해결 될 것입니다.

+0

덕분에, 그 좋은 소식은, 난 그때까지 해결 방법을 사용합니다 :

제안 경로 매핑을 사용하는 것입니다 – Jesse

관련 문제