【问题标题】:NPM CLI application relative path doesn't workNPM CLI 应用程序相对路径不起作用
【发布时间】:2018-12-05 15:52:36
【问题描述】:

我正在 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 上发布了这个包并从那里安装,同样的问题正在发生。

【问题讨论】:

    标签: node.js npm npm-scripts


    【解决方案1】:

    package.json 中的 JSON 格式不正确 - 您应该在设置 bin 参数后删除尾随逗号。

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

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

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

    【讨论】:

    • 它不像你说的那样工作。我发布的 npm 包的结构是 my-package/bin/cli.js 我猜 bin 脚本从 my-package 运行
    • 我唯一遇到的问题是即使存在配置文件也找不到配置文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2012-07-02
    • 2013-02-19
    • 2015-08-30
    • 2011-03-17
    • 2014-06-25
    • 2018-09-15
    相关资源
    最近更新 更多