2017-03-02 2 views
-1
// Rest properties 
require("babel-core").transform("code", { 
    plugins: ["transform-object-rest-spread"] 
}); 

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; 
console.log(x); // 1 
console.log(y); // 2 
console.log(z); // { a: 3, b: 4 } 

// Spread properties 
let n = { x, y, ...z }; 
console.log(n); // { x: 1, y: 2, a: 3, b: 4 } 

Ich versuche das obige Beispiel von http://babeljs.io/docs/plugins/transform-object-rest-spread/ und es funktioniert nicht.Objekt Ausbreitung funktioniert nicht in Knoten 7.5

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; 
      ^^^ 
SyntaxError: Unexpected token ... 
    at Object.exports.runInThisContext (vm.js:73:16) 
    at Module._compile (module.js:543:28) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 
    at Module.runMain (module.js:605:10) 
    at run (bootstrap_node.js:418:7) 
    at startup (bootstrap_node.js:139:9) 
    at bootstrap_node.js:533:3 

Wenn ich es mit babel-node laufen dann funktioniert es gut. Irgendeine Idee warum?

+0

Sie können Ihren Babel-Aufruf nicht in dieselbe Datei wie den Code mit den experimentellen Funktionen einfügen ?! Für babel-node steckst du das Plugin in die Konfigurationsdatei – Bergi

+0

, also wie soll ich das strukturieren? wenn das mein index.js ist – cherhan

+0

Sie sagen, dass es gut funktioniert, wenn es mit babel-node ausgeführt wird. Was ist dein Ziel? – Bergi

Antwort

2

Dies ist die Node-API zum Transformieren von Code, der als erstes Argument der .transform()-Funktion angegeben wurde. Sie müssten durch den tatsächlichen Code ersetzen, den Sie transformieren möchten. Es wird keine Dateien berühren. Sie tun nichts mit dem zurückgegebenen Code, aber Sie versuchen, den Rest der Datei regelmäßig mit Node auszuführen, der den Objektausbreitungsoperator noch nicht unterstützt. Sie müssten den generierten Code entweder ausführen oder in eine Datei schreiben, die Sie mit Node ausführen können.

Hier ist ein Beispiel, wie Sie Ihren Code mit dem Node API transpile würde:

const babel = require('babel-core'); 
const fs = require('fs'); 

// Code that will be transpiled 
const code = `let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; 
console.log(x); // 1 
console.log(y); // 2 
console.log(z); // { a: 3, b: 4 } 

// Spread properties 
let n = { x, y, ...z }; 
console.log(n); // { x: 1, y: 2, a: 3, b: 4 }` 

const transformed = babel.transform(code, { 
    plugins: ["transform-object-rest-spread"] 
}); 

// Write transpiled code to output.js 
fs.writeFileSync('output.js', transformed.code); 

Nach dem Ausführen dieser, eine Datei output.js haben, die das Objekt Ausbreitung umgewandelt. Und dann könnte man es mit laufen:

node output.js 

Siehe auch babel.transform.

Sie werden wahrscheinlich nicht die Node-API verwenden, es sei denn, Sie möchten etwas sehr Spezifisches mit dem Code machen, was eine Art von Analyse oder Transformation ist, aber sicherlich nicht. Oder natürlich, wenn Sie es in ein Werkzeug integrieren, das den Code programmatisch übersetzen muss.

Wenn Sie nur Code ausführen möchten, verwenden Sie babel-node. Wenn Sie es nur transpilieren möchten, verwenden Sie die ausführbare Datei babel.

0

Sie können Node.js ES2015 Support überprüfen. Nodejs object rest/spread properties wird von v8.3 unterstützt.

let person = {id:1, name: 'Mahbub'}; 
let developer = {...person, type: 'nodeJs'}; 
let {name, ...other} = {...developer}; 

console.log(developer); // --> { id: 1, name: 'Mahbub', type: 'nodeJs' } 
console.log(name); // --> Mahbub 
console.log(other); // --> { id: 1, type: 'nodeJs' } 
Verwandte Themen