응용 프로그램 런타임에 필요한 파일 ( node_modules 포함)을 정확하게 결정하는 데 사용됩니다.
이는 번들링이 수행되지 않아 웹 팩에 의존하지 않는 경우를 제외하고 @vercel/ncc와 유사합니다. 이것은 자산이나 바이너리를 움직이지 않고 동일한 나무 흔들리는 혜택을 달성합니다.
npm i @vercel/nft소스 파일 목록을 입력으로 제공합니다.
const { nodeFileTrace } = require ( '@vercel/nft' ) ;
const files = [ './src/main.js' , './src/second.js' ] ;
const { fileList } = await nodeFileTrace ( files ) ; 파일 목록에는 응용 프로그램 코드에서 필요할 수있는 모든 node_modules 모듈 및 자산이 포함됩니다.
파일 목록의 기본 경로 - 모든 파일은이 기반에 비해 제공됩니다.
기본적으로 process.cwd() 사용됩니다.
const { fileList } = await nodeFileTrace ( files , {
base : process . cwd ( ) ,
} ) ; base 위의 모든 파일/폴더는 목록 및 분석에서 무시됩니다.
분석을 적용 할 때 특정 함수는 process.cwd() 값, 예 : path.resolve('./relative') 또는 직접 process.cwd() 호출에 의존합니다.
processCwd 옵션을 설정하면이 분석이 올바른 경로로 안내되어 자산이 올바르게 감지되도록합니다.
const { fileList } = await nodeFileTrace ( files , {
processCwd : path . resolve ( __dirname ) ,
} ) ; 기본적으로 processCwd base 과 동일합니다.
기본적으로 node.js "Exports"및 "imports"필드의 추적이 정의 된대로 추적 된 "node" , " "require" "import" 및 "default" 조건을 사용하여 지원됩니다.
또는 명시 적 조건 목록이 제공 될 수 있습니다.
const { fileList } = await nodeFileTrace ( files , {
conditions : [ 'node' , 'production' ] ,
} ) ; 정확한 내보내기 조건 목록을 지정할 때는 "node" 내보내기 만 명시 적으로 포함되어야합니다 (필요한 경우). "require" , "import" 및 "default" 조건은 어떤 정의 조건이 설정되어 있든 항상 정의 된대로 추적됩니다.
추적을 내보내면 "main" / 인덱스 필드는 여전히 "exports" 지원없이 Node.js 버전에 대해 추적됩니다.
exportsOnly 옵션으로 비활성화 할 수 있습니다.
const { fileList } = await nodeFileTrace ( files , {
exportsOnly : true ,
} ) ; "exports" 이있는 패키지는 수출을 추적 할 수 있으며 메인은 전혀 포함되지 않습니다. 이렇게하면 Node.js 12.17.0 또는 새로 타겟팅 할 때 출력 크기가 줄어 듭니다.
상태 : 실험. 언제든지 변경 될 수 있습니다.
사용할 맞춤형 해상도 경로 정의.
const { fileList } = await nodeFileTrace ( files , {
paths : {
'utils/' : '/path/to/utils/' ,
} ,
} ) ;후행 슬래시지도 디렉토리, 정확한 경로 맵 정확한 맵.
다음 FS 기능은 옵션으로 전달하여 연결할 수 있습니다.
readFile(path): Promise<string>stat(path): Promise<FS.Stats>readlink(path): Promise<string>resolve(id: string, parent: string): Promise<string | string[]> 사용자 정의 Resolve Hook를 제공 할 때 id 입력을 기반으로 하나 이상의 절대 경로를 해결 된 파일로 반환해야합니다. 그러나 어떤 경우에는 결의 행동을 강화하거나 무시하고 싶을 수도 있습니다. nft 의 기본 리졸버를 가져 와서 사용할 수 있습니다. 내장 resolve 기능은 후크에서 전달 해야하는 추가 인수를 기대합니다.
resolve(id: string, parent: string, job: Job, isCjs: boolean): Promise<string | string[]>다음은 하나의 ID가 맞춤형 경로로 해결되는 반면, 내장 된 Resolver가 해결하는 다른 모든 경로를 보여주는 예입니다.
const { nodeFileTrace , resolve } = require ( '@vercel/nft' ) ;
const files = [ './src/main.js' , './src/second.js' ] ;
const { fileList } = await nodeFileTrace ( files , {
resolve : async ( id , parent , job , isCjs ) => {
if ( id === './src/main.js' ) {
return '/path/to/some/resolved/main/file.js' ;
} else {
return resolve ( id , parent , job , isCjs ) ;
}
} ,
} ) ; 내부 해상도는 기본적으로 추적으로 .ts 파일을 해결하는 것을 지원합니다.
기존 빌드 시스템에 통합하는 특성에 따라 TypeScript 컴파일러는이 프로젝트에 포함되지 않습니다. 오히려 TypeScript Transform 레이어는 readFile 후크에 별도의 통합이 필요합니다.
일부 대규모 프로젝트에서는 파일 추적 로직이 많은 파일을 동시에 처리 할 수 있습니다. 이 경우 동시 파일의 수를 제한하지 않으면 OOM 문제가 발생할 수 있습니다.
FS 운영에 대한 성능 및 메모리 사용량의 균형을 맞추기 위해 기본 1024 동시성을 사용합니다. 더 빠른 속도 로이 값을 더 높은 수로 늘릴 수 있지만 동시성이 너무 높으면 메모리 문제를 알고 있어야합니다.
const { fileList } = await nodeFileTrace ( files , {
fileIOConcurrency : 2048 ,
} ) ; 분석 옵션을 사용하면 종속성 목록을 정확하게 해결하기 위해 얼마나 많은 분석을 수행 해야하는지 사용자 정의 할 수 있습니다.
기본적으로 필요한 파일이 흔적에서 제외되지 않도록 가능한 한 많은 분석을 수행 할 수 있습니다.
모든 분석을 비활성화하려면 analysis: false 설정하십시오. 또는 개별 분석 옵션은 다음을 통해 사용자 정의 할 수 있습니다.
const { fileList } = await nodeFileTrace ( files , {
// default
analysis : {
// whether to glob any analysis like __dirname + '/dir/' or require('x/' + y)
// that might output any file in a directory
emitGlobs : true ,
// whether __filename and __dirname style
// expressions should be analyzed as file references
computeFileReferences : true ,
// evaluate known bindings to assist with glob and file reference analysis
evaluatePureExpressions : true ,
} ,
} ) ; 파일 포함을 건너 뛰기 위해 사용자 정의 무시를 제공 할 수 있습니다 (결과적으로 참조 용 파일 분석도 차례로).
const { fileList } = await nodeFileTrace ( files , {
ignore : [ './node_modules/pkg/file.js' ] ,
} ) ;무시는 또한 함수 또는 글로벌을 받아 들일 것입니다.
무시하기 위해 제공된 경로는 base 과 관련이 있습니다.
빌드 사이의 파일 캐시를 유지하려면 빈 cache 개체를 전달하십시오.
const cache = Object . create ( null ) ;
const { fileList } = await nodeFileTrace ( [ 'index.ts' ] , { cache } ) ;
// later:
{
const { fileList } = await nodeFileTrace ( [ 'index.ts' ] , { cache } ) ;
}캐시 무효화는 지원되지 않으므로 파일 시스템이 실행 사이에 변경되지 않았다는 가정입니다.
개별 파일이 포함되는 근본적인 이유를 얻으려면 reasons 도 출력에 의해 제공됩니다.
const { fileList , reasons } = await nodeFileTrace ( files ) ; 그런 다음 출력 reasons 는 다음 형식의 객체가됩니다.
{
[ file : string ] : {
type : 'dependency' | 'asset' | 'sharedlib' ,
ignored : true | false ,
parents : string [ ]
}
} reasons 무시한 것으로 ignored: true , ignoreReason 와 함께.
모든 파일은 다른 파일에 의해 참조되므로 포함됩니다. parents 목록에는이 파일이 포함 된 모든 파일 목록이 포함됩니다.