当我运行package.json bin
command
时,请给我syntax error near unexpected token
('`。
package.json
:
"bin": {
"grabfilenames": "./index.js"
}
npm link
:
/usr/local/bin/grabfilenames -> /usr/local/lib/node_modules/grabfilename/index.js
/usr/local/lib/node_modules/grabfilename -> /Users/dulin/workspace/grabfilename
当我运行cli
时:
grabfilenames -p /Users/dulin/workspace/learn-jquery
给我一个错误:
/usr/local/bin/grabfilenames: line 1: syntax error near unexpected token `('
/usr/local/bin/grabfilenames: line 1: `const fs = require('fs');'
如何解决?谢谢!
答案 0 :(得分:17)
文件说明:
在安装时,npm会将该文件符号链接到用于全局安装的前缀/ bin,或者用于本地安装的./node_modules/.bin/。
这意味着npm对您的文件执行没有什么特别的,并期望它在unix上可执行。您的bin
文件可以是perl脚本,已编译的C程序,shell脚本,Ruby脚本甚至是node.js javascript应用程序。
因此,导致您的应用运行的原因不是npm。这是你的操作系统。因此,您的脚本必须可执行(正如我所说,它甚至可以是已编译的二进制文件)。
在unix上,要使用正确的解释器自动执行脚本,您需要将sh-bang作为文件中的第一行。对于node.js,我通常使用这一行:
#! /usr/bin/env node
您通常可以使用:
#! /whatever/path/to/node
但取决于操作系统甚至发行版node.js可能安装在不同的位置。所以/usr/bin/env
是一个加载默认环境变量的程序,其中包含$PATH
,允许shell自动找到node.js的安装位置。