我正在尝试创建一个节点命令行应用。 我正在做的是从一个充满信息的文件中提取电子邮件。
但是当我运行命令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。
答案 0 :(得分:1)
在移除shebang行并通过以下方式调用它之后,它在Linux Mint 15 中有效:
$ node code.js emails emailsOut
同时添加特定于操作系统的行#!/usr/bin/node
和chmod +x code.js
我可以通过
$ ./code.js emails emailsOut
不幸的是,Windows并不适用于shebang线。可以找到解决方法here。