以–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); }
使用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