NPM CLI应用程序相对路径不起作用
我正在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"
},
}
斌/ cli.js
const nodePlop = require('node-plop');
const configPath = './bin/config.js';
const plop = nodePlop(configPath, {
force: argv.force || argv.f
});
斌/ config.js
{
// some configuration
}
现在如果我从这个目录创建带有npm install -g
的符号链接并从同一个开发目录运行命令mycliapp
,它工作得很好但是如果我从我的计算机中的任何其他目录运行这个mycliapp
命令,则尝试从当前的const configPath = './bin/config.js'
中获取工作目录不是来自实际的npm包,因此找不到配置文件。
我该如何解决这个问题?我尝试使用__dirname
和__filename
与path.join
但似乎没有任何工作。
我也在npm上发布了这个软件包并从那里安装,同样的问题也在发生。
回答如下:你的package.json
中的JSON格式不正确 - 你应该在设置bin
参数后删除尾随的逗号。
此外,如果您的配置文件与脚本位于同一目录中,则应在脚本中将其作为./config.js
引用。
最后,您需要在#!/usr/bin/env node
文件的顶部包含一个shebang(cli.js
)或您打算用作进入应用程序的任何文件,以便您的系统知道用于执行文件的解释器。
有关更多信息,请参阅npm博客上的this post。