NPM CLI应用程序相对路径不起作用

时间:2018-06-26 20:46:14

标签: node.js npm npm-scripts

我正在NodeJS中创建一个CLI应用程序,该软件包将在NPM上发布。该应用程序非常简单,因为它只有两个文件。这是应用程序的结构:

package.json

{
  "name": "mycliapp",
  "version": "1.0.0",
  "description": "Some description",
  "main": "./bin/cli.js",
  "preferGlobal": true,
  "bin": {
    "mycliapp": "bin/cli.js"
  },
}

bin / cli.js

const nodePlop    = require('node-plop');
const configPath  = './bin/config.js';
const plop = nodePlop(configPath, {
 force: argv.force || argv.f
});

bin / config.js

{
  // some configuration
}

现在,如果我在此目录中使用npm install -g创建符号链接并在同一开发目录中运行命令mycliapp,那么它绝对可以正常工作,但是如果我从其他任何一个运行此mycliapp命令在我计算机上的目录中,const configPath = './bin/config.js'试图从当前工作目录中获取,而不是从实际的npm软件包中获取,因此找不到配置文件。

如何解决此问题?我尝试将__dirname__filenamepath.join一起使用,但似乎无济于事。

我也在npm上发布了此软件包,并从那里安装了该软件包。

1 个答案:

答案 0 :(得分:-1)

package.json中的JSON格式错误-设置了bin参数后,您应该删除结尾的逗号。

此外,如果配置文件与脚本位于同一目录中,则应在脚本中将其引用为./config.js

最后,您需要在#!/usr/bin/env node文件或您打算用作应用程序入口点的任何文件的顶部包含一个Shebang(cli.js),以便系统知道用于执行文件的解释器。

有关更多信息,请参见npm博客上的this post