我试图用node设置一个简单的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支持#!语法,但前提是它出现在文件的第一行。

07-24 09:44
查看更多