以–harmony模式运行节点shell脚本

我怎样才能运行一个全局安装的节点模块,公开一个shell脚本在--harmony模式?

TL; DR:只要使用Node 5+,大部分ES6function都可以马上使用。


2016答复

这更像是对2015年答案的修正。
原因是因为Node.js和io.js已经融合在一起 ,而且项目现在强大得多 ,在保持长期支持(LTS)和支持大量ES6function的同时,还有很多更新。 js也支持。

Node.js 5.0.0+中的显着特性:

  • new.target
  • 传播运营商
  • 箭头function
  • Object.assign

2015答案

我们现在有io.js可用。 它稳定,快速,并且稳定的ES6规格是最新的。

根据你想要的ES6function,你可以在没有标志的情况下使用它。 从他们的网站 :

  • 块范围界定
    • 常量
    • function在块

      从v3 3.31.74.1开始,块范围声明是有意实现的,对严格模式代码有一个不合规的限制。 开发人员应该意识到,随着V8继续朝着ES6规范的要求,这将会发生变化。

  • 集合
    • 地图
    • WeakMap
    • WeakSet
    • 发电机
  • 二进制和八进制文字
  • 承诺
  • 新的string方法
  • 符号
  • 模板string

2014答案

怎么样与你的东西产生第二个节点进程?

 #!/usr/bin/env node var spawn = require("child_process").spawn; var child = spawn(process.execPath, [ "--harmony", "yourscript.js" ], { cwd: __dirname }); child.stdout.on("data", function( data ) { console.log(data); }); child.stderr.on("data", function( data ) { console.error(data); }); 

编辑:相信 process.execPath返回节点path,而不是全球脚本path在这种情况下。
但是,您可以随时直接将其更改为node ,但这可能导致PATH中无节点的安装。

你可以创build一个“node-harnomy”可执行文件:

在/ usr / local / bin目录/节点和谐

 #!/bin/bash node --harmony "$@" 

和谐,cmd.js

 #!/usr/bin/env node-harmony function* foo() { } 

在发现用参数启动节点的黑客攻击之后,我编写了这个脚本来启动我的应用程序和生成器支持,如果不可用,则会失败,并显示一个明确的错误。 --harmony如果不支持, --harmony不做任何事情。 如果你想支持更早的节点版本,你也可以回退到使用gnode

 #!/bin/sh ":" //# comment; exec /usr/bin/env node --harmony "$0" "$@" var generators = require('generator-supported'); if (generators) { require('../lib'); } else { console.log('ERROR: node >= v0.11.3 is required for generators'); process.exit(1); } 

https://gist.github.com/raine/ab56a90442ea1f61a97d

使用Node.js v5.0,您可以使用严格模式使用最新的ES2015

/bin/server

 #!/usr/bin/env node --use_strict //node.js code. 

然后放在package.json脚本的下面

 scripts: { "start": "./bin/server" } 

注意:它在Mac OS上工作,但不知道Ubuntu等

截至这个答案的时候,唯一可行的解​​决scheme是使用gnode的编程API,并将bash脚本分成两个单独的文件。

shellScript.js

 #!/usr/bin/env node require('gnode'); require('./main'); 

main.js

 // main shell script logic using generators 

只需在脚本的顶部放置#!/usr/bin/env node --harmony 。 但是你应该记住,和声标志在不同的v8版本中公开了不同的特征集合,所以你可能没有例如0.10节点的可用生成器,等等。

更新这可能不会在一些系统上工作。 在OS X上testing