web-dev-qa-db-ja.com

インタプリタの依存関係を扱う方法

コンシューマソフトウェアはしばしばインタプリタの依存関係を持ちます。ターゲットシステムにターゲットシステムにインストールされていない場合は、必要なインタプリタがインストールされていない状況が、コンシューマソフトウェア、非テクニカルピープルのためのソフトウェアにどのようにしてください。

Bellow、i node.jsとmacosで例を付けますが、私の質問は他のプラットフォームにも同様に当てはまります。


Node.js(Shebangを介して)で実行されるように書かれたMacOS用の消費者ソフトウェアをリリースしましょう。 MacOSには、デフォルトでNode.jsがインストールされていませんので、ここで2つのISHメジャーオプションがあると思います。

  • 私のソフトウェアにnode.jsをpack.jsを添付してください
  • Node.jsがダウンロードサイトでソフトウェアを実行するために必要なことを言及してください
  • (デフォルトで実行できるソフトウェアは、メインプログラムの前に実行されるソフトウェアを含みます。このソフトウェアは、node.jsがインストールされているかどうかを確認します。そうでなければ、それは彼が必要な依存関係をインストールしたいかどうかをユーザーに尋ねるべきです。そして彼がそうするのを助けます。)〜働くだろうが、これは一般的なものではないようです。

どちらのオプションが広く使用されていました(Node.jsとMacOSの例コンボを使って、それ自体ではありませんが)。どちらも彼らの長所と短所を持っています。

ユーザーがシステムにNode.jsをインストールさせることは、おそらく非技術者のための面倒な面倒です。

アプリケーションを使用してNode.jsランタイム全体を梱包することも、特にインタプリタが実際のアプリケーションコードよりも多くのスペースを取るソフトウェアでも理想的ではありません。ユーザーコンピュータのすべてのアプリがこれを行うと、ディスクの大部分は、packed node.js-executablesによって入力されますが、本当に必要なグローバルなものは1つだけです。

2
eds1999

Hans-Martin Mosnerによる答えとして説明すると、それはターゲットシステムとユーザーの期待によって異なります。しかし、追加するものがあります。 1つのパッケージですべての依存関係をバンドルすることを選択した場合は、あなたがしていることをよく知っておくべきであり、あなたは自己包含環境を作成することができるはずです。私はAppleについて知りませんが、頻繁にはWindowsでもLinuxでも既存のインストーラが既存のライブラリのバージョンを変更し、他のアプリケーションの依存関係を壊します。

あなたの場合は:

環境変数を気にしない場合は、不明なバージョンのライブラリがデフォルトの実行可能ディレクトリからロードされる可能性があるため、最初のオプションを除外します。

3番目のオプションの場合は、1つのディレクトリ内のすべてを抽出し、PATH、LD_LIBRARY_PATH、またはその他の環境変数にディレクトリを追加してからコンソールを起動するシェルスクリプトを指定できます。

自己包含環境がうまくいかない場合、またはわからない場合は、安全側に留まり、2番目のオプションに記載されているように依存関係について言及することができます。

0
FluidCode