2011-01-22 48 views
50

Tôi đang sử dụng Node.js và muốn kết hợp CoffeeScript vào luồng công việc của mình. Tôi có hai trường hợp sử dụng:yêu cầu() 'nhập tệp CoffeeScript từ tệp JavaScript hoặc REPL

  1. Tôi muốn để có thể ghi tập tin JavaScript mà require() module CoffeeScript
  2. Tôi muốn để có thể nạp module CoffeeScript từ bên trong REPL nút

Đối với trường hợp # 1: Tôi chỉ có thể biên dịch từ .coffee thành .jsrequire() mô-đun .js, để giải quyết sự cố.

Đối với trường hợp # 2: Hiện tại, tôi là eval() nhập đầu ra là coffee-script.compile().

Có cách nào tốt hơn, thống nhất hơn để thực hiện việc này không?

+0

Còn về CoffeeScript REPL, 'coffee' thì sao? –

+0

REPL đó rất nguyên thủy so với nút: nó thiếu màu, tự động hoàn thành, câu lệnh đa dòng vv – nicolaskruchten

+5

Cập nhật: 'cà phê' REPL giờ đây thật tuyệt vời :) – nicolaskruchten

Trả lời

91

tập lệnh cà phê đăng ký tiện ích mở rộng của nó sau khi được yêu cầu.

$ echo 'console.log "works"' > module.coffee 

$ echo ' 
> require("coffee-script") 
> require("./module") 
> ' > test.js 

$ node test.js 
works 

$ node 
> require('coffee-script'); require('./module') 
works 
{} 

Sửa: Hành vi này đã thay đổi với sự relase của CoffeeScript 1.7.0. Bây giờ bạn cần phải làm:

require('coffee-script/register'); 
+0

Huh, tại sao tôi không nghĩ vậy? :) – nicolaskruchten

+2

'require.extensions' hiện không được chấp nhận và chưa có lựa chọn thay thế nào. – vaughan

+0

Tôi hy vọng nó sẽ hoạt động như một tính năng ổn định và, như bạn đã đề cập, chưa có lựa chọn thay thế. – Gunchars

11

Một giải pháp linh hoạt hơn sẽ sử dụng better-require.

npm install better-require 

Nó cho phép bạn require() tệp CoffeeScript, không cần biên dịch trước. (Nó cũng cho phép bạn require() một loạt các định dạng tệp khác: CoffeeScript, clojurescript, yaml, xml, v.v.)

Trong trường hợp CoffeeScript, nó chỉ yêu cầu mô-đun coffee-script.

require('better-require')(); 
var myModule = require('./mymodule.coffee'); 
var clojurescriptModule = require('./mymodule.cljs'); 
// etc. 

Tiết lộ: tôi đã viết better-require.

+1

vấn đề trung tâm với 'require.extensions' — việc đăng ký một tiện ích mở rộng thay đổi trạng thái toàn cầu, cho toàn bộ ứng dụng của bạn — thật đáng buồn, không được giải quyết bởi' better-require', có nghĩa là mọi thứ sẽ bị hỏng nếu có bất kỳ bên thứ 3 nào của bạn các mô-đun xảy ra phụ thuộc vào một phiên bản khác, ví dụ như Yaml hoặc CoffeeScript. – flow

+0

yêu cầu tốt hơn cũng không tải mô-đun ".litcoffee" theo mặc định, trong khi chúng có thể được tải thông qua 'require ('coffee-script/register');' – shaunc

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