我正在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
和__filename
与path.join
一起使用,但似乎无济于事。
我也在npm上发布了此软件包,并从那里安装了该软件包。
答案 0 :(得分:-1)
package.json
中的JSON格式错误-设置了bin
参数后,您应该删除结尾的逗号。
此外,如果配置文件与脚本位于同一目录中,则应在脚本中将其引用为./config.js
。
最后,您需要在#!/usr/bin/env node
文件或您打算用作应用程序入口点的任何文件的顶部包含一个Shebang(cli.js
),以便系统知道用于执行文件的解释器。
有关更多信息,请参见npm博客上的this post。