【问题标题】:Nodejs command line app: unexpected token `else'Nodejs命令行应用程序:意外令牌“else”
【发布时间】:2014-01-18 19:05:18
【问题描述】:

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

但是当我运行命令 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 运行更简单的脚本。

【问题讨论】:

  • 你试过删除shebang吗?
  • 那我不能将它作为命令行应用程序运行。我需要指定脚本解释器。

标签: node.js


【解决方案1】:

它可以在 Linux Mint 15 中运行删除 shebang 行并通过以下方式调用它:

$ node code.js emails emailsOut

另外添加操作系统特定的行 #!/usr/bin/nodechmod +x code.js 我可以运行它

$ ./code.js emails emailsOut

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

【讨论】:

  • 我忘了提到如果我使用node 命令(没有shebang)运行它,它会起作用。我需要 shebang 才能将其用作命令行应用程序。尝试使用chmod +x,但没有区别。我在窗户上。
  • 这使它在本机 Windows 命令行中工作。但是,不幸的是,它不适用于 Git Bash,因为它会寻找解释器。我确实在 Git Bash 中使用 shebang 运行了一个更简单的命令行应用程序,并且成功了。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
相关资源
最近更新 更多