npm link 会导致 JavaScript 语法错误



我正在尝试使用节点设置一个简单的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')'

这是我的包.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"
  }
}

这是我的索引.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 支持#!语法,但前提是它出现在文件的第一行。

最新更新