Wird verwendet, um genau zu bestimmen, welche Dateien (einschließlich node_modules ) für die Anwendungslaufzeit erforderlich sind.
Dies ähnelt @vercel/ncc, außer dass keine Bündelung durchgeführt wird und daher keine Abhängigkeit von Webpack. Dies erzielt die gleichen baumschüttelkischen Vorteile, ohne Vermögenswerte oder Binärdateien zu bewegen.
npm i @vercel/nftGeben Sie die Liste der Quelldateien als Eingabe an:
const { nodeFileTrace } = require ( '@vercel/nft' ) ;
const files = [ './src/main.js' , './src/second.js' ] ;
const { fileList } = await nodeFileTrace ( files ) ; Die Liste der Dateien enthält alle Module und Vermögenswerte node_modules , die möglicherweise vom Anwendungscode benötigt werden.
Der Basispfad für die Dateiliste - Alle Dateien werden als relativ zu dieser Basis bereitgestellt.
Standardmäßig wird der process.cwd() verwendet:
const { fileList } = await nodeFileTrace ( files , {
base : process . cwd ( ) ,
} ) ; Alle Dateien/Ordner über der base werden in der Auflistung und Analyse ignoriert.
Bei der Anwendung process.cwd() Analyse beruhen bestimmte Funktionen auf den process.cwd() path.resolve('./relative')
Durch das Festlegen der Option processCwd kann diese Analyse auf den richtigen Pfad geführt werden, um sicherzustellen, dass die Vermögenswerte korrekt erkannt werden.
const { fileList } = await nodeFileTrace ( files , {
processCwd : path . resolve ( __dirname ) ,
} ) ; Standardmäßig ist processCwd das gleiche wie base .
Standardmäßig werden die Felder "Exporte" und "Importe" der Node.js "Exporte" und "Importe" unterstützt, wobei der "node" , "require" , "import" und "default" -Beaugungen wie definiert aufgeführt sind.
Alternativ kann die explizite Liste der Bedingungen bereitgestellt werden:
const { fileList } = await nodeFileTrace ( files , {
conditions : [ 'node' , 'production' ] ,
} ) ; Nur der "node" Export sollte bei Bedarf explizit (falls erforderlich) bei der Angabe der genauen Exportbedingungsliste enthalten sein. Die Bedingungen "require" , "import" und "default" werden immer wie definiert verfolgt, unabhängig davon, welche benutzerdefinierten Bedingungen festgelegt sind.
Bei der Verfolgung von Exporten wird das Feld "main" / Index für Node.js -Versionen ohne "exports" -Verhöhung weiterhin verfolgt.
Dies kann mit der Option exportsOnly deaktiviert werden:
const { fileList } = await nodeFileTrace ( files , {
exportsOnly : true ,
} ) ; In jedem Paket mit "exports" wird dann nur seine Exporte verfolgt, und das Hauptstaat wird überhaupt nicht enthalten. Dies kann die Ausgangsgröße verringern, wenn sie auf den Knoten abzielen. Js 12.17.0 oder neuer.
Status: experimentell. Kann sich jederzeit ändern.
Benutzerdefinierte Auflösungspfaddefinitionen zu verwenden.
const { fileList } = await nodeFileTrace ( files , {
paths : {
'utils/' : '/path/to/utils/' ,
} ,
} ) ;Nachfolgende Schrägstriche Kartenverzeichnisse, genaue Pfade nur genau.
Die folgenden FS -Funktionen können durch Bestehen als Optionen begeistert sein:
readFile(path): Promise<string>stat(path): Promise<FS.Stats>readlink(path): Promise<string>resolve(id: string, parent: string): Promise<string | string[]> Bei der Bereitstellung eines benutzerdefinierten Auflösungs -Hooks sind Sie für die Rückgabe eines oder mehrere absolute Pfade an aufgelöste Dateien basierend auf der id -Eingabe verantwortlich. Es kann jedoch der Fall sein, dass Sie das Auflösungsverhalten in bestimmten Fällen nur erweitern oder außer Kraft setzen möchten. Sie können den zugrunde liegenden Resolver von nft verwenden, indem Sie ihn importieren. Die integrierte resolve erwartet zusätzliche Argumente, die vom Haken weitergeleitet werden müssen
resolve(id: string, parent: string, job: Job, isCjs: boolean): Promise<string | string[]>Hier ist ein Beispiel, das zeigt, dass eine ID auf einen maßgeschneiderten Pfad gelöst wird, während alle anderen Pfade vom integrierten Resolver gelöst werden
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 ) ;
}
} ,
} ) ; Die interne Auflösung unterstützt standardmäßig die Auflösung .ts -Dateien in den Spuren.
Durch seine Art der Integration in vorhandene Build -Systeme ist der TypeScript -Compiler nicht in dieses Projekt enthalten. Die Typscript -Transformationsschicht erfordert eine separate Integration in den readFile -Hook.
In einigen großen Projekten kann die Logik der Dateiverfolgung viele Dateien gleichzeitig verarbeiten. In diesem Fall werden OOM -Probleme wahrscheinlich nicht die Anzahl der gleichzeitigen Dateien einschränken.
Wir verwenden einen Standard von 1024 Parallelität, um die Leistung und den Speicherverbrauch für FS -Operationen auszugleichen. Sie können diesen Wert für eine schnellere Geschwindigkeit auf eine höhere Zahl erhöhen, sind sich jedoch der Speicherprobleme bewusst, wenn die Parallelität zu hoch ist.
const { fileList } = await nodeFileTrace ( files , {
fileIOConcurrency : 2048 ,
} ) ; Analyseoptionen ermöglichen das Anpassen, wie viel Analyse durchgeführt werden sollte, um genau die Abhängigkeitsliste zu erarbeiten.
Standardmäßig wird eine so viele Analyse wie möglich durchgeführt, um sicherzustellen, dass keine benötigten Dateien aus der Spur ausgelassen werden.
Set analysis: false . Alternativ können individuelle Analyseoptionen über:
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 ,
} ,
} ) ; Custom Ignores kann zur Überspringen von Dateieinschlüsse (und folglich die Analyse der Datei für referenzübergreifende) überspringen.
const { fileList } = await nodeFileTrace ( files , {
ignore : [ './node_modules/pkg/file.js' ] ,
} ) ;Ignore akzeptiert auch eine Funktion oder Globs.
Beachten Sie, dass der zu ignorierende Pfad relativ zur base ist.
Um den Datei -Cache zwischen Builds zu bestehen, übergeben Sie ein leeres cache -Objekt:
const cache = Object . create ( null ) ;
const { fileList } = await nodeFileTrace ( [ 'index.ts' ] , { cache } ) ;
// later:
{
const { fileList } = await nodeFileTrace ( [ 'index.ts' ] , { cache } ) ;
}Beachten Sie, dass Cache -Ungültigmachungen nicht unterstützt werden, sodass die Annahme ist, dass das Dateisystem nicht zwischen den Läufen geändert wird.
Um die zugrunde liegenden Gründe für einzelne Dateien einzubeziehen, wird auch ein reasons des Objekts durch die Ausgabe bereitgestellt:
const { fileList , reasons } = await nodeFileTrace ( files ) ; Die Ausgabe reasons sind dann ein Objekt der folgenden Form:
{
[ file : string ] : {
type : 'dependency' | 'asset' | 'sharedlib' ,
ignored : true | false ,
parents : string [ ]
}
} reasons umfassen auch Dateien, die als ignored: true , mit ihrer ignoreReason .
Jede Datei ist enthalten, weil sie von einer anderen Datei verwiesen wird. Die parents enthält die Liste aller Dateien, die dazu geführt haben, dass diese Datei aufgenommen wurde.