2017-03-02 6 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 } 

私は上記の例をhttp://babeljs.io/docs/plugins/transform-object-rest-spread/から試していますが、動作しません。ノード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 

babel-nodeで実行すると問題なく動作します。どんな考え?

+0

実験的な機能を備えたコードと同じファイルにバベルコールを置くことはできません。 babel-nodeの場合は、そのプラグインを設定ファイル – Bergi

+0

に入れて、どうすればいいのですか?これが私のindex.jsなら – cherhan

+0

あなたはbabel-nodeで動くとうまくいくと言います。だからあなたの目標は何ですか? – Bergi

答えて

2
require("babel-core").transform("code", { 
    plugins: ["transform-object-rest-spread"] 
}); 

これは.transform()関数の最初の引数として与えられたコードを変換するNode APIです。 "code"を変換する実際のコードに置き換える必要があります。それはどんなファイルにも触れません。返されるコードは何もしませんが、Object spread演算子をまだサポートしていないNodeを使用してファイルの残りの部分を定期的に実行しようとします。生成されたコードを実行するか、ノードで実行できるファイルに書き込む必要があります。

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); 

これを実行した後、あなたがオブジェクトの広がりを変換したファイルoutput.jsを持っている:ここでは

を使用すると、ノードAPIを使用してコードをtranspileする方法を例です。そして、あなたはそれを実行することができます:

node output.js 

babel.transformも参照してください。

あなたはおそらくノードAPIを使用しないでしょう。何らかの解析や変換がありますが、確かにそれを実行していないというコードに非常に特有のことをしたいのです。もちろん、プログラムでコードを翻訳する必要のあるツールに統合する場合もあります。

コードを実行する場合は、babel-nodeを使用してください。あなたがそれを単純化したいのであれば、babel実行可能ファイルを使用してください。

0

Node.js ES2015 Supportをチェックしてください。 Nodejs object rest/spread propertiesは、v8.3という形式でサポートされています。

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' } 
関連する問題