本地节点js模块不执行脚本

时间:2017-06-15 07:23:23

标签: node.js npm

我正在尝试创建一个简单的节点js插件。这是我到目前为止所做的事情。

的package.json

{
    "name": "testcli",
    "version": "0.0.1",
    "description": "Test CLI Tool",
    "main": "index.js",
    "author": "BJ",
    "license": "ISC",
    "bin": {
        "testx": "index.js"
    }
}

在package.json旁边,我有一个文件index.js只有一行console.log('Hi!')

现在当我使用npm install -g(来自同一目录)安装软件包然后运行命令testx时,它会给我以下错误

.../AppData/Roaming/npm/testx: line 1: /node_modules/testcli/index.js: No such file or directory

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您需要添加一个shebang来告诉shell如何调用此脚本。

尝试在脚本开头添加#! /usr/bin/env node

答案 1 :(得分:0)

许多软件包都有一个或多个他们想要安装到PATH中的可执行文件。 npm使这很简单(事实上,它使用此功能来安装“npm”可执行文件。)

要使用此功能,请在package.json中提供bin字段,该字段是命令名称到本地文件名的映射。在安装时,npm会将该文件符号链接到用于全局安装的前缀/ bin,或者用于本地安装的./node_modules/.bin/。

例如,myapp可能有这个:

{ "bin" : { "myapp" : "./cli.js" } }

因此,当你安装myapp时,它会创建一个从cli.js脚本到/ usr / local / bin / myapp的符号链接。

如果您有一个可执行文件,并且其名称应该是软件包的名称,那么您可以将其作为字符串提供。例如:

{ "name": "my-program"
, "version": "1.2.5"
, "bin": "./path/to/program" }

将与此相同:

{ "name": "my-program"
, "version": "1.2.5"
, "bin" : { "my-program" : "./path/to/program" } }

请确保bin中引用的文件以#!/ usr / bin / env node 开头,否则脚本将在没有节点可执行的情况下启动!