我正在尝试使用 node.js 设置一个简单的 CLI。当我运行 npm link
并尝试我的命令时,我将完全有效的 JS 语法错误记录到控制台。
代码
命令行
$ holla
输出:
/usr/local/bin/holla: line 1: syntax error near unexpected token `'hello''
/usr/local/bin/holla: line 1: `console.log('hello')'
这是我的 package.json:
{
"name": "npm-cli-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"bin": {
"holla": "index.js"
}
}
这是我的 index.js:
console.log('hello')
一些额外的上下文
如果有帮助:
# $PATH variable
/Users/stuartpearman/.rbenv/shims:/Users/stuartpearman/.bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# npm global packages
/usr/local/lib/node_modules
最佳答案
bin
属性需要一个可执行文件。所以 holla
可执行文件应该是一个编译的 C(或 Go 或 Pascal 或任何创建真实机器代码的程序)程序。如果我没记错的话,它也接受 shell 脚本并默认为您配置为用户 shell 的内容。所以语法错误不是 javascript 语法错误,但很可能是 bash 语法错误,因为 console.log('hello')
不是有效的 shell 语法。
这让我们找到了 unix 上关于如何指定脚本所用语言的标准解决方案:sh bang 行。您的脚本应该如下所示:
#! /usr/bin/env node
console.log('hello');
是的,node.js 支持 #!
语法,但前提是它出现在文件的第一行。
关于node.js - npm 链接导致 javascript 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838658/