Есть ли способ уменьшить количество команд для запуска приложения, установленного из npm? - PullRequest
0 голосов
/ 23 мая 2019

Я сделал небольшой пакет npm и развернул его, в основном это инструмент CLI, встроенный в узел, и я пытаюсь сократить количество команд, необходимых для его выполнения

Пока что для использования CLI я следуюэто шаги: -> npm установить my_package (очевидно) -> cd node_modules / my_package -> node index.js

запуск node node_modules/my_package/index.js не дает ожидаемого результата, потому что я использую PropertyReader длячитать из файла .properties , и если я не запускаю CLI из папки, содержащей этот файл, я получаю сообщение об ошибке «нет такого файла или каталога»

это структура пакета

/node_modules
|__ /my_package
    |__ index.js
    |__ my.properties

Часть моего index.js, чтобы помочь:

#!/usr/bin/env node
"use strict";

var PropertiesReader = require('properties-reader');

properties = PropertiesReader('./my.properties');

идеальный сценарий будетустановите пакет и выполните одну команду, чтобы запустить мой CLI, любые предложения или идеи, которые могут помочь, приветствуются

Спасибо

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Примечание. В этом ответе предполагается, что вы работаете в операционной системе в стиле Unix, такой как Linux или OSX.

Как правило, вы создаете исполняемую команду где-нибудь в каталоге вашего проекта и используете npm link, чтобы связать ее с ./node_modules/.bin (или с вашим глобальным исполняемым каталогом.)

Если вы решили сохранить команду в своем проекте (а не устанавливать ее глобально), важно убедиться, что ваш PATH включает ./node_modules/.bin (как в: export PATH=./node_modules/.bin:$PATH), чтобы вы могли вызывать свой новый CLI.

См. Руководство по созданию пакета командной строки NodeJS для полного решения.

Наконец, если вы хотите сослаться на ресурсы, относящиеся к каталогу установки, вам нужно загрузить их, используя path.resolve , чтобы преобразовать относительный путь в абсолютный, например: var res = require(path.resolve(__dirname, '../config/file')) где __dirname представляет каталог, в котором живет ваш CLI.

Предполагая, что:

./
  index.js
  package.json
  bin/
    cli
  config/
    my.properties

в ./bin/cli, вы бы:

const path=require('path')
const PropertiesReader = require('properties-reader')
const properties_file_path = path.resolve(__dirname, '../config/my.properties')
const properties = PropertiesReader(properties_file_path)
0 голосов
/ 24 мая 2019

Я настроил предлагаемое решение под свои нужды, полагаясь на __ dirname , чтобы получить абсолютный путь к моему index.js , найти из него файл свойств

const path = require("path");
var dirpath = path.resolve(__dirname);
properties = PropertiesReader(path.join(dirpath, "my.properties"));

Теперь мне все еще нужно найти способ заменить команду: node node_modules/my_package/index.js чем-то вроде start my_package или просто my_package, что, кстати, работает по умолчанию, когда я устанавливаю my_package глобально ( npm install -g my_package ) (я просто запускаю my_package в CMD, и он работает!)

У кого-нибудь есть идея, как воспроизвести это поведение, даже если я его устанавливаю локально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...