2017-01-23 6 views
4

Problem ignorieren:, wie man reagieren nativen Verpacker bestimmte Verzeichnisse

Mein Projekt hat ein @providesModule naming collision wenn man versucht, react-native run-ios von der Kommandozeile ausgeführt werden. Es steht im Konflikt mit dem automatisch generierten Verzeichnis dist/, das von einem anderen npm-Paket, esdoc, erstellt wird. Ich würde gerne in der Lage sein, dieses automatisch generierte Verzeichnis zu behalten und nur den reaktiven nativen Packer dazu zu bringen, dasVerzeichnis zu ignorieren.

Fehlermeldung:

[01/23/2017, 13:17:07] <START> Building Haste Map 
    Failed to build DependencyGraph: @providesModule naming collision: 
     Duplicate module name: ann 
     Paths: /Users/thurt/projects/example/package.json collides with /Users/thurt/projects/example/dist/esdoc/package.json 

This error is caused by a @providesModule declaration with the same name across two different files. 
Error: @providesModule naming collision: 
    Duplicate module name: ann 
    Paths: /Users/thurt/projects/example/package.json collides with /Users/thurt/projects/example/dist/esdoc/package.json 

This error is caused by a @providesModule declaration with the same name across two different files. 
    at HasteMap._updateHasteMap (/Users/thurt/projects/example/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:158:13) 
    at p.getName.then.name (/Users/thurt/projects/example/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:133:31) 

Antwort

7

Sie sind fast da in https://github.com/facebook/react-native/issues/12131

Sie können eine Datei in Ihrem Projektstamm rn-cli.config.js mit dem Inhalt aufgerufen erstellen:

const blacklist = require('react-native/packager/blacklist'); 

module.exports = { 
    getBlacklistRE: function() { 
    return blacklist([/dist\/.*/]); 
    } 
}; 

Update für Reactive Native> = 0.46. react-native/packager wurde in das metro-bundler Paket verschoben. Die obere (benötigen) Zeile sollte jetzt sein:

const blacklist = require('metro-bundler').createBlacklist; 

[Ende Update]

Haben Sie Ihre CLI-Befehl verwenden diese Konfiguration, indem man die --config Option:

react-native run-ios --config=rn-cli.config.js

(NB Es möglicherweise ein Fehler, den Sie übergeben müssen das --config Argument, dieser Speicherort sollte wahrscheinlich automatisch geladen werden, aber node_modules/react-native/rn-cli.config.js hat Vorrang)

Seien

beachten Sie, dass Ihre dist Ordner können bereits durch den Verpacker zwischengespeichert wurden in diesem Fall das erste Mal Sie es ausführen müssen Sie möglicherweise den Cache zurück:

react-native start --config=rn-cli.config.js --resetCache

+1

Dank rob! Für meine Situation brauchte ich nur das '--reset-cache'-Flag einzufügen. jetzt scheint es, dass meine 'rn-cli.config.js' Datei automatisch verwendet wird, also brauchte ich nicht' --config = rn-cli.config.js'. Nachdem ich den Packager-Schritt erfolgreich hinter mich gebracht habe, bekam ich immer noch den Fehler "Modul nicht gefunden", wenn die App zum ersten Mal versucht, geladen zu werden. Ich habe den Namen des Projektordners am Anfang der Blacklist Regex hinzugefügt, die das Problem zu beheben scheint. Ich denke, ich brauchte das, um sicherzustellen, dass der Packer Ordner wie /node_modules//dist/ – thurt

+0

nicht ignoriert, welche Version verwenden Sie? –

+0

@GuySegal rn 0.40.0 – thurt

Verwandte Themen