npm链接导致javascript语法错误

我正在尝试与节点build立一个简单的CLI。 当我运行npm link并尝试我的命令,我得到语法错误logging到控制台完全有效的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或者任何能够创build真正的机器代码的程序)。 如果我没有把它当作方便,它也会接受shell脚本,并默认你已经configuration成你的用户的shell。 所以语法错误不是一个javascript语法错误,但最有可能是一个bash语法错误,因为console.log('hello')不是有效的shell语法。

这导致我们在unix上的标准解决scheme如何指定您的脚本是在什么语言: sh爆炸线。 你的脚本应该看起来像这样:

 #! /usr/bin/env node console.log('hello'); 

是的,node.js支持#! 语法,但只有当它出现在文件的第一行时。