Nodejs命令行应用程序:意外令牌`else'

时间:2014-01-18 19:05:19

标签: node.js

我正在尝试创建一个节点命令行应用。 我正在做的是从一个充满信息的文件中提取电子邮件。

但是当我运行命令npm link以使脚本全局可用时,我会收到以下错误:

/c/Users/petfle/AppData/Roaming/npm/email-extract: line 11: syntax error near unexpected token `else'
/c/Users/petfle/AppData/Roaming/npm/email-extract: line 11: `else '

我的代码通过linting,我看不到任何错误。我是节点的新手,所以它可能是一些简单的,特定于节点的东西,我看不到。

这是我的代码:

#!/c/Program\ Files/nodejs/node

var file_stream = require('fs');

var source = process.argv[2];
var output = process.argv[3];

file_stream.readFile(source, 'utf8', function (error, data) {
    var list_of_emails = extract_emails(data);
    write_to_file(list_of_emails);
});

function extract_emails(data) {
    return data.match(/([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/g);
}

function write_to_file(emails) {
    file_stream.writeFile(output, emails.join('\n'), 'utf8', function (error) {
        console.log('Wrote ' + emails.length + ' lines to ' + output);
    });
}

编辑: 如果我删除shebang并使用node myscript.js file.txt file2.txt运行它,它就可以工作。我在窗户上。

编辑2: 我在Git Bash中运行它。即使在Windows上,它确实运行了一个更简单的脚本与shebang。

1 个答案:

答案 0 :(得分:1)

在移除shebang行并通过以下方式调用它之后,它在Linux Mint 15 中有效:

$ node code.js emails emailsOut

同时添加特定于操作系统的行#!/usr/bin/nodechmod +x code.js我可以通过

运行它
$ ./code.js emails emailsOut

不幸的是,Windows并不适用于shebang线。可以找到解决方法here