on
Node.js 프로젝트의 루트에서 모듈을 가져오는 방법
Node.js 프로젝트의 루트에서 모듈을 가져오는 방법
반응형
나는 내가 노는 시간이 아니라, 그 일을 완성한 것에 대해 돈을 받는다. 컨설턴트가 아닌 이상 상황은 마찬가지다. 다른 것으로 마이그레이션과 같은 작업을 완료하려면 다시 사용할 가능성이 없는 보조 Node.js 기반 명령줄 도구를 만들어야 합니다. 도구를 사용하기 전에는 흠이 없어야 하지만 미래의 잠재적 문제를 제공하는 것은 시간 낭비일 뿐이다. 그래서 저는 항상 가장 간단한 해결책에 관심이 있습니다.
어떤 이유로 프로젝트 루트에 저장된 모듈을 프로젝트 폴더 트리에 깊이 저장된 모듈로 가져와야 합니다. 예를 들어 root.js를 file3.js로 가져오는 가장 좋은 방법을 알아보겠습니다.
저는 네 가지 가능한 해결책을 생각할 수 있습니다. 단순성과 내구성에 따르면, 첫 번째는 괜찮다. 마지막 두 가지 선택이 똑같이 최선이다. 두 번째, 제 경우 가장 인기 있는 것은 시간 낭비입니다.
상대 URL
여러 개의 두 점이 있는 상대 URL을 사용하여 패키지 루트에서 file3.js로 파일을 쉽게 가져올 수 있습니다.
import val from '../../../root.js';
그러나 현재로서는 최적의 폴더 트리를 설정하지 않았습니다. 아마도 나는 module file3.js를 다른 폴더로 옮겨야 할 것 같다. 이 경우 상대 URL의 두 점 수를 업데이트해야 할 수 있습니다. 그것은 어렵지 않지만 시간 낭비이다.
트랜스파일러 또는 번들러 구성
바벨이나 웹팩으로도 할 수 있어요. 그러나 빌드 단계를 설정하는 데 시간을 낭비하고 싶지는 않습니다. 그리고 저는 디버거할 수 없는 코드를 생성하는 불분명하고 디버그하기 어려운 단계로 간단한 프로젝트를 복잡하게 만들고 싶지는 않습니다.
번들러는 Node.js 프로젝트에 적합하지 않을 뿐만 아니라 개발도 복잡합니다. 다소 복잡한 논리로 툴을 개발하기 위해서는 개별 모듈의 유닛 테스트를 계속 수행해야 합니다. 그리고 테스트를 위해, 나는 내장된 주장 모듈 이상이 필요하지 않다. 기본적으로 노드 1\2\3\file3.js 또는 노드 1\2\3\file3Test.js와 같은 명령을 반복적으로 실행할 것입니다.
패키지 이름을 사용하여 루트 폴더 참조
패키지의 루트에 있는 모듈은 package.json에 지정된 패키지 이름을 사용하여 동일한 패키지의 다른 모듈로 가져올 수 있습니다. 내 프로젝트 이름이 샘플이면 아래 가져오기가 작동합니다.
import val from 'sample/root.js';
작동하지만 기본적으로 작동하지 않습니다. 자체 참조는 내보내기 필드를 패키지에 추가하여 사용할 수 있습니다.JSON:
"name": "sample", "exports": { "./*": "./*" }
가져오기 맵을 사용하여 루트 폴더 참조
또는 가져오기 맵을 사용하여 패키지 루트를 참조하는 가짜 패키지 이름으로 시작하는 유효한 모듈 지정자를 만드는 것이 쉽습니다.
import val from '#root/root.js';
위의 고급 가져오기 문이 작동하려면 패키지를 지정하십시오.json에는 가져오기 필드가 포함되어야 합니다.
"imports": { "#root/*": { "default": "./*" } }
가져오기 필드의 가짜 패키지 이름은 해시 기호로 시작해야 합니다.
세 샘플의 소스 코드는 https://github.com/marianc000/importFromRoot에서 다운로드 받을 수 있으며 샘플의 루트 폴더에서 노드 1\2\3\file3.js로 실행할 수 있다.
from http://it-ground.tistory.com/300 by ccl(A) rewrite - 2021-10-14 09:26:38