2017-01-04 4 views
0

Mit Cygwin unter Windows 10 (64 Bits) babel-cli installiert, und reactbabel-preset-react oben auf Node.js nachreagieren, die über Windows Installer installiert wurde (da es keine Unterstützung für Cygwin.) Ich habe diese Node-Pakete mit yarn im globalen Modulordner installiert.Vorkompilieren jsx in django-Kompressor

In der django-compressor Dokumentation (https://django-compressor.readthedocs.io/en/latest/reactjs/) sie sagen, dass ein Precompilers Einstellung funktioniert der Trick: (. Fehler zu werfen, wenn virtuelle dom Elemente stoßen)

COMPRESS_PRECOMPILERS = (
    ('text/jsx', 'cat {infile} | babel > {outfile}'), 
) 

jedoch babel nicht jsx erkennt Es ist offensichtlich, denn ich bin nicht die react Voreinstellung an den Befehl übergeben. Aber ich kann dieses Preset nicht benutzen, weil ich es im globalen Modulordner installiert habe und jetzt kann ich Babel nicht finden und benutzen.

Ich brauche eine dieser möglichen Lösungen:

  1. Wie kann ich babel machen verwenden eine Voreinstellung global installiert ist (wie soll ich babel --presets react in einer Weise nutzen, die funktioniert)?

  2. Wie verwende ich eine .babelrc Datei in einem Django-Projekt?

  3. Wenn ich das Preset lokal installiere (was ich nicht sehr mag), wie mache ich es mit meinem Django-Projekt live, ohne meine Projektverzeichnisstruktur durcheinander zu bringen?

Antwort

2

Okay, schlug ich den Kopf ein paar Mal und fand eine Lösung:

  1. Es gibt keine Möglichkeit babel Arbeit mit Presets global installiert zu machen. Sie müssen diese lokal installieren. Alle react, react-dom, babel-core, babel-loader, babel-preset-react (und vielleicht babel-preset-es2015, wenn die neueste ECMA-Syntax gewünscht wird) müssen lokal installiert werden.

  2. Es gibt keinen Platz für eine .babelrc Datei, in der der Precompiler sie verwenden würde. Verwenden Sie auch keinen babel Abschnitt in package.json. Stattdessen sollte die Precompilers Einstellung wie die Vorgaben in der Befehlszeile übergeben:

    COMPRESS_PRECOMPILERS = (
        ('text/jsx', 'cat {infile} | babel --presets react,es2015 > {outfile}'), 
    ) 
    
  3. einfach davon ausgehen, dass der Ordner, in die manage.py Leben ist auch die Wurzel für NodeJS Pakete. Nicht getestet, wenn es aus einer wsgi Datei bereitgestellt und ausgeführt wird, aber die wsgi sollte auch neben manage.py leben.

Auch sieht es aus wie all diese Dateien und Ordner: node_modules, package.json und yarn.lock (wenn mit yarn Installation wie ich bin,) muss in der Versionskontrolle einbezogen werden.

EDITED: ich kein loger denken node_modules in die Versionskontrolle gehen sollte.