如何运行以--harmony
模式公开 shell 脚本的全局安装的节点模块?
6 回答
您可以创建一个“node-harnomy”可执行文件:
/usr/local/bin/node-harmony
#!/bin/bash
node --harmony "$@"
和谐-cmd.js
#!/usr/bin/env node-harmony
function* foo() {
}
TL;DR:只需使用 Node 5+,大多数 ES6 功能将立即可用。
2016年答案
这更像是对 2015 年答案的修正。
原因是 Node.js 和 io.js 已经融合,并且项目现在更加强大,有很多更新,同时保持长期支持 (LTS) 并支持许多 ES6 特性,除了那些 io. js 也支持。
Node.js 5.0.0+ 中可用的显着特性:
2015年答案
我们现在有io.js可用。它可靠、快速且与稳定的 ES6 规范保持同步。
根据您想要的 ES6 功能,您可以完全不使用标志来使用它。从他们的网站:
- 块范围
- 让
- 常量
- 功能块
从 v8 3.31.74.1 开始,块范围的声明是有意实现的,对严格模式代码有不合规的限制。开发人员应该意识到,随着 v8 继续向 ES6 规范合规性发展,这将发生变化。
- 收藏品
- 地图
- 弱地图
- 放
- 弱集
- 发电机
- 二进制和八进制文字
- 承诺
- 新的字符串方法
- 符号
- 模板字符串
2014年答案
用你的东西生成第二个 Node 进程怎么样?
#!/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
在这种情况下返回节点路径,而不是全局脚本路径。
但是,您始终可以将其更改为node
直接,但这可能会破坏 PATH 中没有节点的安装。
在发现使用参数启动节点的 hack之后,我编写了这个脚本来启动我的应用程序并支持生成器,如果不可用,则会失败并出现明显错误。--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
严格模式使用 latest。
/bin/server
#!/usr/bin/env node --use_strict
//node.js code.
然后把下面的行 package.json 脚本
scripts: {
"start": "./bin/server"
}
注意:它适用于 Mac OS,但不确定 Ubuntu 等。
截至本答案发布时,唯一可行的解决方案是使用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 上测试