2015-06-24 15 views
5

Tôi đang cố gắng biên dịch một ứng dụng Koa và Koa có các xác nhận kiểm tra để đảm bảo rằng tôi đang truyền các chức năng của máy phát như phần mềm trung gian. Tuy nhiên, tôi muốn biên dịch mã phía máy chủ của tôi từ ES7 bằng Babel, để nhất quán với mã kết thúc trước.Babel có thể biên dịch cho "node --harmony" thay vì ES5 không?

Có thể nhắm mục tiêu hài hòa nút, thay vì ES5 không? Tôi không thấy bất cứ điều gì hứa hẹn trong các tùy chọn, nhưng việc chọn một mục tiêu có vẻ giống như một điều chuẩn để có thể làm với trình biên dịch.

cập nhật

Blacklisting Babel của regenerator transform dường như không có hiệu lực, mặc dù tôi đang sử dụng stage: 1.

index.js:

require("babel/register")({ 
    sourceMaps: "inline", 
    stage: 1, 
    blacklist: [ "regenerator" ], 
    optional: [ "asyncToGenerator" ] 
}); 

var app = require("./src/server"); 

app.listen(process.env.port || 3000); 

src/server.js:

import koa from "koa"; 
import router from "koa-router"; 

router.get("/", function *(next) { 
    this.body = "Hi!"; 
}); 

let app = koa(); 
app.use(router()); 

export default app; 

Execute: node --harmony index.js

node --version 
v0.12.4 

Trả lời

4

Không có thực sự là một nét tiêu chuẩn của --harmony vì nó sẽ phụ thuộc vào phiên bản Node hoặc ioj nào bạn đang sử dụng. Điều tốt nhất bạn có thể làm với Babel là quyết định rõ ràng những biến đổi nào để chạy. Babel cho phép bạn cung cấp tùy chọn whitelist và/hoặc blacklist, ví dụ:

{ 
    blacklist: [ 
    'es6.classes' 
    ] 
} 

ví dụ sẽ dừng chuyển đổi các lớp ES6 và dựa trên nền tảng của bạn hỗ trợ chúng. Danh sách biến đổi chính là here.

'regenerator' trong trường hợp này sẽ vô hiệu hóa các trình tạo transpiling. Tuy nhiên, nếu bạn tắt tính năng này và bạn đang sử dụng các chức năng không đồng bộ, bạn muốn sau đó vượt qua optional: ['asyncToGenerator'] để cho phép chuyển đổi các chức năng không đồng bộ thành các trình tạo tiêu chuẩn có chức năng bao bọc, như chúng sẽ kết thúc ở đầu ra cuối cùng.

+0

regenerator Blacklisting không có tác dụng, mặc dù tôi đang sử dụng 'giai đoạn: 1'. Điều kỳ lạ là nếu tôi chạy Babel từ CLI thay vì sử dụng bộ phun yêu cầu, tôi thấy rằng Babel chỉ biên dịch nguồn của tôi, không phải là Koa hoặc bất kỳ node_modules nào khác. Điều này là tốt, những mô-đun nên có máy phát điện của họ còn nguyên vẹn, nhưng khi tôi chạy phiên bản biên dịch, tôi vẫn nhận được lỗi xác nhận tương tự. –

+0

Nếu tôi hỏi điều gì khiến bạn nói nó không có hiệu lực? Làm thế nào bạn thực sự thử nghiệm cho dù nó được tải như một máy phát điện thực sự vs một transpiled một? Xác nhận bạn đã đề cập là gì? – loganfsmyth

+0

Tôi hỏi bởi vì theo như tôi biết, máy phát điện 'tái tạo' được chuyển đổi vẫn nên vượt qua kiểm tra 'GeneratorFunction '== fn.constructor.name' trong Koa. – loganfsmyth

1

Strange nó dường như được làm việc kể từ CLI (với những thay đổi nhỏ trong server.js)

babel-node --blacklist regenerator --harmony server.js 

Mã cho server.js:

import koa from "koa"; 
import router from "koa-router"; 

const Router = router(); 

Router.get("/", function *(next) { 
    this.body = "Hi foo!"; 
}); 

let app = koa(); 
app.use(Router.routes()); 

export default app; 
+0

' app.use (Router.routes()); '- Đây thực sự là cách tôi đang gắn các tuyến đường. Có vẻ như đã có bản cập nhật cho koa-router. –

Các vấn đề liên quan