简体   繁体   中英

How to enable harmony syntax support in coffeescript?

I used node.js(0.11.13) with --harmony flag and used function *() and yield keywords.

I tried to simplify my development on node.js with help of coffeescript, so far it works great but I went into troubles with yield and declaring a generator - it complains about 'reserved keyword yield' .

Any ideas?

Another way to open the gate to the black dimension is:

co = require 'co'
sleep = require 'co-sleep'

co(`function*(){1`
    console.log 'hi!'
    `yield sleep(1000)`
    console.log 'bye!'
`1}`)()

It's seems to be perfectly valid coffee-script, though, webstorm cofeescript plugin cries about errors, but it works.

Also the following solution(vanilla coffeescript and gulp) is possible:

co      = require 'co'
sleep   = require 'co-sleep'
$       = (cor) -> cor
$yield  = (cor) -> cor

do co $ ->
    console.log "hi!"
    $yield sleep(1000)
    console.log "bye!"

gulp.task 'node-js', ->
    gulp.src config.srcServerJs, {base: config.srcServerJsBase}
    .pipe plumb()
    .pipe coffee()
    .pipe replace(/\$\(function\(/g, '\$(function*(')
    .pipe replace(/\$yield\(/g, 'yield (')
    .pipe gulp.dest(config.dstServerJs)

magic: no errors in IDE :)

Update After trying and reading a lot of stuff about coffee, ecma6 and its future I decided to give up on coffeescript and go with ECMA6 with support of traceur for both node.js and client-side

It's actually now possible to use yield in coffeescript 1.9.x

from coffeescript's website

CoffeeScript functions also support ES6 generator functions through the yield keyword. There's no function*(){} nonsense — a generator in CoffeeScript is simply a function that yields.

example:

perfectSquares = ->
  num = 0
  loop
    num += 1
    yield num * num
  return

Use (for example) my fork: https://github.com/xixixao/coffee-script

There are other ones with different syntax.

Generators support (the yield keyword) landed in the master branch some time ago, but haven't been released yet.

You can get it via NPM and put as a dependency in package.json:

npm i jashkenas/coffeescript

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM