У меня есть простое приложение CLI, написанное на Javascript с использованием Node, для внутреннего использования небольшой командой. Он работает в терминале Linux как приложение CLI. Приложение состоит из одного файла «.js» и требует нескольких пакетов Node. Проблема, с которой я сейчас сталкиваюсь, заключается в том, как развернуть ее в нашей внутренней команде, используя простой метод, который соответствует нашему обычному процессу обновления компьютеров конечных пользователей.

Наше приложение должно быть установлено один раз на рабочую станцию ​​/ ноутбук и быть доступным для всех пользователей на этом компьютере. Любой пользователь должен иметь возможность открыть терминал и ввести команду для запуска приложения.

Кажется, что многие обсуждали использование Javascript для программирования оболочки, но эта проблема развертывания законченного приложения широко не обсуждается. Я не нашел ничего по теме. До сих пор мне рекомендовали решения, подходящие как для сред разработки, так и для веб-серверов.

Это приложение не является веб-приложением и не развернуто на сервере . Он должен работать в автономном режиме. Я также не спрашиваю о разработке или поддержке приложения на рабочей станции .

В идеале процесс установки должен быть таким же простым, как установка сценария оболочки в /usr/local/bin и установка разрешений, чтобы все разрешенные пользователи на компьютере могли его запускать. Мы ищем способ установки, подобный этому:

  • скопируйте файл Javascript только один раз на каждый компьютер (в папку на $PATH ) и убедитесь, что пакеты Node доступны глобально на этом компьютере.

  • Я специально хочу избежать npm install для каждой учетной записи пользователя на каждом компьютере.

  • Я также хочу избежать обновления пакетов Node для каждой учетной записи пользователя на каждом компьютере.

Разработчик будет постоянно обновлять приложение, чтобы оно всегда было совместимо с последней версией пакетов Node, и на всех компьютерах, на которых оно развернуто, всегда будут установлены последние версии этих пакетов.

Здесь обсуждается одна конкретная проблема, но ответы предполагают другой набор требований (например, необходимость «нескольких приложений, работающих в разных версиях пакета»).

Мы используем эти два подхода для аналогичных развертываний:

  • программы живут в определенном сетевом монтировании. Все пользователи могут запускать один и тот же пакет оттуда. Разработчик только обновляет этот пакет. Нет копирования на локальные машины.

  • мы используем простой сценарий развертывания, который выполняется на всех компьютерах при входе в систему. Это толкает и копирует последнюю версию на локальный компьютер.

Для этих требований, если реальная проблема заключается в устранении ошибки EACCESS (вы должны отредактировать вопрос, включив эту информацию), вам следует просмотреть разрешения всех каталогов и убедиться, что учетная запись пользователя, которая управляет пакетами узлов на каждом компьютере имеет правильные разрешения.

Один из способов сделать это — дать /usr/local специальную группу, установить бит закрепления с помощью chmod (см. Man chmod ) и использовать chgrp -R в существующем дереве.

Затем сделайте npm install -g учетную запись членом этой группы и не используйте sudo для npm install -g .

(Никогда не использовать sudo для установки в /usr/local имеет дополнительное преимущество, заключающееся в том, что вы не можете случайно установить что-то в другом месте, например, потому что вы не правильно указали пути в этом локальном источнике пакета.)