Wie kann man den org-babel-Quellblock mit ES6-7 zum Laufen bringen?

9

Ich habe Schwierigkeiten, org-babel dazu zu bringen, diesen Codeblock mit zu bewerten

emacs v24.5
node v5.0.0
babel-node v.6.6.5

 # + BEGIN_SRC js: cmd "babel-node"

   sei arr = [1, 2]; 
   sei [x, y] = arr;

   console.log (x);
   console.log (y);

 # + END_SRC


Die Ausgabe sieht so aus

/ tmp / babel-3700Vaq / js-script-37003RN: 2
sei arr = [1, 2]; ^^^ SyntaxError: Deklarationen mit Blockbereich (let, const, function, class) werden außerhalb des strengen Modus noch nicht unterstützt at exports.runInThisContext (vm.js: 53: 16) at Module._compile (module.js: 404: 25) at loader (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126:5) at Object.require.extensions. (anonyme Funktion) [als .js] (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:136:7) bei Module.load (module.js: 356: 32) at Function.Module._load (module.js: 311: 12) bei Function.Module.runMain (module.js: 457: 10) unter /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:27 bei Objekt. (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:162:7) at Module._compile (module.js: 425: 26) *

Aber dieser Quellblock scheint in Ordnung zu sein

 # + BEGIN_SRC js: cmd "babel-node"
 konstante Zahlen = [10,20,30,50];
 const multiplyBy10 = numbers.map (a => a * 10);
 console.log (multiplyBy10);

 # + END_SRC

 # + ERGEBNISSE:
 | 100 | 200 | 300 | 500 |


Bearbeiten: Selbstausführende Funktion mit "use strict" hinzugefügt

# + BEGIN_SRC js: cmd "babel-node" 
(Funktion xy () {
"benutze streng";
sei arr = [1, 2];
sei [x, y] = arr;
console.log (x);
console.log (y);
}) ()

# + END_SRC

# + ERGEBNISSE:

Die Ausgabe sieht so aus

/ tmp / babel-13529OHt / js-script-13529MVq: 6
    sei [x, y] = arr;
        ^

SyntaxError: Unerwartetes Token [
    at exports.runInThisContext (vm.js: 53: 16)
    at Module._compile (module.js: 404: 25)
    at loader (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126:5)
    at Object.require.extensions. (anonyme Funktion) [als .js] (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:136:7)
    bei Module.load (module.js: 356: 32)
    at Function.Module._load (module.js: 311: 12)
    bei Function.Module.runMain (module.js: 457: 10)
    unter /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:27
    bei Objekt. (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:162:7)
    at Module._compile (module.js: 425: 26)


Edit: Dank @ebpa habe ich es geschafft, es mit zu lösen

npm install -g babel-preset-es2015


Dies ist die Ausgabe, die ich nach der Auswertung des Standardquellblocks erhalte, der keinen selbstausführenden Funktionswrapper hat.

/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:372
          neuen Fehler auslösen ("Preset konnte nicht gefunden werden" + JSON.stringify (val) + "relativ zum Verzeichnis" + JSON.stringify (dirname));
          ^

Fehler: Die Voreinstellung "es2015" in Bezug auf das Verzeichnis "/ tmp / babel-270346ez" konnte nicht gefunden werden.
    unter /usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:372:17
    bei Array.map (native)
    unter OptionManager.resolvePresets (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:364:20)
    unter OptionManager.mergePresets (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:348:10)
    unter OptionManager.mergeOptions (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:307:14)
    unter OptionManager.init (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transformation/file/options/option-manager.js:465:10)
    at compile (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:81:45)
    at loader (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126:14)
    at Object.require.extensions. (anonyme Funktion) [als .js] (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:136:7)
    bei Module.load (module.js: 356: 32)


Bearbeiten: Starten Sie ein Terminal und führen Sie babel-node aus

> require ('babel-preset-es2015');

Ausgabe

Fehler: Modul 'babel-preset-es2015' kann nicht gefunden werden
    at Function.Module._resolveFilename (module.js: 337: 15)
    at Function.Module._load (module.js: 287: 25)
    at Module.require (module.js: 366: 17)
    at require (module.js: 385: 17)
    bei repl: 1: 1
    at Object.exports.runInThisContext (vm.js: 54: 17)
    at _eval (/home/johnwind/.nvm/versions/node/v5.0.0/lib/node_modules/babel-cli/lib/_babel-node.js:102:26)
    at REPLServer.replEval (/home/johnwind/.nvm/versions/node/v5.0.0/lib/node_modules/babel-cli/lib/_babel-node.js:187:14)
    at bound (domain.js: 280: 14)
    bei REPLServer.runBound [als Bewertung] (domain.js: 293: 12)

Bearbeiten: Eine Fortsetzung der Inbetriebnahme

http://rwx.io/posts/org-with-babel-node-updated/

Bearbeiten: Dieser Beitrag gab mir einen Hinweis auf dieses Puzzleteil

https://phabricator.babeljs.io/T6723

http://discuss.babeljs.io/t/error-parsing-jsx-with-global-installation-babel-preset-react/59/6

Bearbeiten: Endlich funktioniert es, indem eine lokale Kopie installiert wird

$ mkdir local_babel
$ cd local_babel
$ npm init
$ npm install --save-dev babel-cli
$ npm install --save-dev babel-core
$ npm install --save-dev babel-preset-es2015
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-preset-stage-3

hat einen Softlink für babel-node erstellt

$ cd / usr / local / bin
$ ln -s ~ / local_babel / node_modules / babel-cli / bin / babel-node.js org-babel-node

.zshrc

export npm_config_prefix = $ HOME / .node_modules
export PATH = $ PATH: $ HOME / .node_modules / bin

Fügte dies meiner init.el hinzu

(setenv "NODE_PATH"
    (concat
        "/ home / johnwind / local_babel / node_modules" ":"
         (getenv "NODE_PATH")
    )
)

Ausgabe

# + BEGIN_SRC js: cmd "org-babel-node --presets es2015" 

sei arr = [1, 2];
sei [x, y] = arr;

console.log (x);
console.log (y);

# + END_SRC

# + ERGEBNISSE:
: 1
: 2
: nicht definiert

Im Moment habe ich sowohl eine lokale als auch eine globale Kopie von babel-cli, babel-core, babel-preset-es2015. Was mich immer noch nicht so recht umhüllen konnte, da es eine Art Verschwendung von Ressourcen ist.

Aber es funktioniert.

Johnathan Foong
quelle
Haben Sie versucht, "strict"in der ersten Zeile Ihres Quellcodes etwas hinzuzufügen ? Dies scheint der Fehler zu suggerieren.
wvxvw
es hat nicht funktioniert. Hast du es geschafft, sie zum Laufen zu bringen? Wenn ja, können Sie die unternommenen Schritte näher erläutern.
Johnathan Foong
@JohnathanFoong Ich denke, @wvxvw meinte "use strict"nicht "strict", versuchen Sie das.
Jordon Biondo
Dies ist der Fehler, den ich bekomme, nachdem ich "use strict" hinzugefügt habe. SyntaxError: Unerwartetes Token [at exports.runInThisContext (vm.js: 53: 16) at Module._compile (module.js: 404: 25) ...
Johnathan Foong
Vielleicht sollten Sie diesen Code in eine selbstaufrufende Funktion einbinden und "use strict";am Anfang hinzufügen .
Caisah

Antworten:

5

Dies ist ein Problem beim Übergang von Babel 6 zur ausschließlichen Verwendung von Plugins. Sie müssen das voreingestellte Plugin es2015 installieren:

npm install -g babel-preset-es2015

und benötigen Sie es auch im Aufrufbefehl:

#+BEGIN_SRC js :cmd "babel-node --presets es2015"
let arr = [1, 2];
let [x, y] = arr;

console.log(x);
console.log(y);
#+END_SRC
ebpa
quelle
Vielen Dank für die Lösung, und jetzt
Johnathan Foong
Und Sie haben es global installiert? Versuchen Sie, ein Skript außerhalb von Emacs require ('babel-preset-es2015');
auszuführen, um
Ich habe das oben genannte auf babel-node in einem Terminal ausgeführt und die Ausgabe war Fehler: Modul 'babel-preset-es2015' kann nicht gefunden werden ....
Johnathan Foong
Nach einem kurzen Lauf mit Babel-Doctor stelle ich fest, dass mir ein .babelrc fehlt. Wie soll ich damit umgehen?
Johnathan Foong
Wenn Sie babel-preset-es2015erfolgreich global installiert wurden, haben Sie wahrscheinlich ein Problem mit Ihrem NODE_PATH. Was .babelrc betrifft, wird babel-node --presets es2015dasselbe erreicht wie { "presets": ["es2015"] }in Ihrem .babelrc, daher ist ein .babelrc nicht unbedingt erforderlich. .babelrc wäre definitiv vorzuziehen, aber aus irgendeinem Grund berücksichtigt babel-node ~ / .babelrc auf meinem System nie.
Ebpa