Относительный путь приложения CLI NPM не работает - PullRequest
0 голосов
/ 26 июня 2018

Я создаю приложение CLI в NodeJS, и пакет будет опубликован в 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 и установил оттуда, возникает та же проблема.

1 Ответ

0 голосов
/ 27 июня 2018

JSON в вашем package.json искажен - вы должны удалить запятую после того, как вы установили параметр bin.

Кроме того, если ваш файл конфигурации находится в том же каталоге, что и ваш скрипт, вы должны ссылаться на него в вашем скрипте как ./config.js.

Наконец, вам нужно добавить шебанг (#!/usr/bin/env node) вверху файла cli.js или любой файл, который вы собираетесь использовать в качестве точки входа в приложение, чтобы ваша система знала, какой интерпретатор использовать для выполнить файл.

См. этот пост в блоге npm для получения дополнительной информации.

...