Skip to content

Archives

  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月

Categories

  • カテゴリーなし
Trend RepositoryArticles and guides
Articles

scripts

On 12月 17, 2021 by admin
Table of contents
  • Description
  • Pre & Post Scripts
  • ライフサイクルスクリプト
  • Prepare and Prepublish
  • ライフサイクル操作順序
  • npm publish
  • npm pack
  • npm install
  • npm start
  • Default Values
  • User
  • Environment
  • path
  • package.json vars
  • configuration
  • Special: package.json “config” object
  • 現在のライフサイクル イベント
  • Examples
  • Exiting
  • フックスクリプト
  • See Also

Description

package.json ファイルの"scripts"プロパティは、多くの組み込みスクリプトとそのプリセット ライフサイクル イベント、および任意のスクリプトをサポートします。 これらはすべて npm run-script <stage> または npm run <stage> を実行することで実行できます。 一致する名前のプリポストコマンドも同様に実行される(例:premyscript, myscript, postmyscript)。 依存関係のスクリプトは npm explore <pkg> -- npm run <stage> で実行できます。

Pre & Post Scripts

package.json の "scripts" セクションで定義されたスクリプトに対して “pre” または “post” スクリプトを作成するには、単に一致する名前の別のスクリプトを作って、それらの先頭に “pre” または “post” を追加するだけです。

{
"scripts": {
"precompress": "{{ `compress` スクリプトの前に実行されます }}",
"compress": "{{ ファイルを圧縮するコマンドを実行 }}",
"postcompress": "ファイルを圧縮するコマンドを実行します。 "{{ `compress` スクリプトの後に実行する }}".
}
}

ライフサイクルスクリプト

特定の状況でのみ発生する、特別なライフサイクルスクリプトがあります。 これらのスクリプトは、”pre” と “post” スクリプトに追加して実行されます。

  • prepare, prepublish, prepublishOnly, prepack, postpack

prepare (846>以降)

  • パッケージがパックされる前に実行
  • パッケージが公開する前に実行
  • ローカル npm install で何も引かずに実行
  • prepublishより後で、prepublishOnly より前に実行
  • NOTE: git を通してインストールされるパッケージが prepare スクリプトを含んでいる場合、パッケージがパッケージ化されてインストールされる前に、その dependencies と devDependencies がインストールされ、prepare スクリプトが実行されるでしょう。

prepublish (DEPRECATED)

  • prepare と同様

prepublishOnly

  • パッケージが準備されてパッケージされる前に npm publish 上でのみ実行されます。

prepack

  • tarball が圧縮される前に実行されます (npm pack, npm publish, および git 依存関係をインストールするとき)。
  • NOTE: “npm run pack” は “npm pack” と同じものではありません。 「

postpack

  • tarball が生成され、最終目的地に移動した後に実行されます。

Prepare and Prepublish

非推奨 Note: prepublish

[email protected]以来、npm CLI は npm publish と npm install の両方に対して prepublish スクリプトを実行しています。これは、使用のためにパッケージを準備するのに都合の良い方法であるからです (いくつかの共通の使用例は下のセクションで説明されています)。 これはまた、実際には非常にわかりにくいものであることが判明しています。 [email protected] の時点で、この既存の動作を維持する新しいイベント prepare が導入されています。 新しいイベント prepublishOnly は、ユーザーが既存の npm バージョンの混乱した動作を避け、npm publish でのみ実行できるようにする過渡的な戦略として追加されました (たとえば、テストを最後にもう一度実行して、良い状態であることを確認するなどです)。

この変更に関する、さらなる読み物を含むより長い正当化理由については、https://github.com/npm/npm/issues/10074 を参照してください。

使用例

ターゲット システムの OS やアーキテクチャに依存しない方法で、使用前にパッケージに対して操作を実行する必要がある場合、prepublishスクリプトを使用してください。 これには次のようなタスクが含まれます:

  • CoffeeScript ソース コードを JavaScript にコンパイルする。
  • JavaScript ソース コードの minified バージョンを作成する。
  • パッケージが使用するリモート リソースを取得する。

これらのことを prepublish 時に実施する利点は、一度で単一の場所で行うため複雑さと変動性が少なくなることです。 さらに、これは以下のことを意味します。

  • devDependency として coffee-script に依存できるので、ユーザーはそれをインストールする必要がありません。
  • 最小化ツールをパッケージに含める必要がなく、ユーザーにとってのサイズを縮小できます。

ライフサイクル操作順序

npm publish

  • prepublishOnly
  • prepare
  • prepublish
  • publish
  • postpublish

npm pack

  • prepack
  • postpack

npm install

  • preinstall
  • install
  • postinstall

トリガーも

  • prepublish (ローカル時)
  • prepare (ローカル時)

npm start

npm run start にはnpm startの略記があります。

  • prestart
  • start
  • poststart

Default Values

npm はパッケージ内容に基づいていくつかの値をデフォルトで使用します。

  • "start": "node server.js":

    パッケージのルートに server.js ファイルがある場合、npm は start コマンドを node server.js にデフォルト設定します。

  • "install": "node-gyp rebuild":

    パッケージのルートに binding.gyp ファイルがあり、独自の install または preinstall スクリプトを定義していない場合、npm は node-gyp を使用してコンパイルするために install コマンドを既定に設定します。

User

npm が root 権限で起動された場合、uid を user config で指定したユーザーアカウントまたは uid (デフォルトは nobody) に変更します。

Environment

Package scripts run in the environment where many pieces of information are available regarding the setup of npm and the current state of the process.

path

testsuites など、実行スクリプトを定義するモジュールに依存している場合、それらの実行可能ファイルはスクリプト実行時の PATH に追加されることに注意してください。 つまり、package.json が以下のような場合:

{
"name" : "foo",
"dependencies" : {
"bar" : "0.1.x"
},
"scripts": {
"start" : "bar ./test"
}.
}

そこで npm start を実行すると bar スクリプトが実行され、npm install の node_modules/.bin ディレクトリにエクスポートされます。

package.json vars

package.json フィールドは npm_package_ プレフィックスに追加されました。 例えば、package.json ファイルに {"name":"foo", "version":"1.2.5"} がある場合、パッケージスクリプトには npm_package_name 環境変数に “foo” が設定され、npm_package_version に “1.2.5” が設定されていることになります。 これらの変数には process.env.npm_package_name や process.env.npm_package_version でアクセスでき、他のフィールドも同様です。

configuration

設定パラメータは、npm_config_ というプレフィックスで環境に格納されます。 例えば、環境変数npm_config_rootを確認することで、有効なrootconfigを見ることができます。

Special: package.json “config” object

configパラメータに<name>:<key>があると、環境中のパッケージのconfigキーが上書きされる。 例えば、package.jsonが以下のような場合:

{
"name" : "foo",
"config" : {
"port" : "8080"
},
"scripts" : {
"start" : "node server.js"
}.
}

そして server.js はこれです:

http.createServer(...).listen(process.env.npm_package_config_port)

とすると、ユーザーは次のようにして動作を変更できます:

npm config set foo:port 80

現在のライフサイクル イベント

最後に、npm_lifecycle_event 環境変数はサイクルのどの段階でも設定されていることを示します。 したがって、プロセスのさまざまな部分で使用され、現在何が起こっているかに基づいて切り替わる 1 つのスクリプトを持つことができます。

オブジェクトはこの形式に従ってフラット化されるため、{"scripts":{"install":"foo.js"}} がパッケージに含まれている場合、そのオブジェクトは、

のように表示されます。

process.env.npm_package_scripts_install === "foo.js"

Examples

例えば、package.json に次のようなものがあるとします:

{
"scripts" : {
"install" : "scripts/install.js",
"postinstall" : "scripts/install.js",
"uninstall" : "scripts/uninstall.js"
} となります。
}

すると、ライフサイクルのインストールとインストール後の段階で scripts/install.js が呼び出され、パッケージがアンインストールされるときに scripts/uninstall.js が呼び出されることになります。 scripts/install.js は 2 つの異なるフェーズで実行されるので、この場合、npm_lifecycle_event 環境変数を調べるのが賢明でしょう。

Make コマンドを実行したい場合、そうすることが可能です。 これはちょうどよく動作します:

{
"scripts" : {
"preinstall" : "./configure",
"install" : "make && make install",
"test" : "make test"
} ですね。
}

Exiting

スクリプトは、shにスクリプト引数として行を渡すことで実行されます。

もし、0以外のコードで終了した場合、プロセスを中断します。

スクリプトファイルは、nodejsやjavascriptプログラムでさえある必要はないことに注意してください。

フックスクリプト

すべてのパッケージの特定のライフサイクルイベントで特定のスクリプトを実行したい場合、フックスクリプトを使用することができます。

Hook スクリプトは package.json スクリプトとまったく同じ方法で実行されます。つまり、別の子プロセスで、上記の環境下で実行されます。 失敗がマイナーであったり、いくつかのオプション機能を妨げるだけであれば、警告を表示して正常に終了する方がよいでしょう。 package.json を読んで、パッケージを適切に記述するだけで指定したり有効にしたりできるものをすべて見てください。 一般に、これはより堅牢で一貫した状態をもたらします。

  • どこにものを置くかを決定するために env を検査します。 たとえば、npm_config_binroot 環境変数が /home/user/bin に設定されている場合、実行可能ファイルを /usr/local/bin にインストールしようとしないでください。
  • スクリプトコマンドの前に “sudo” を付けないでください。 何らかの理由で root 権限が必要な場合、そのエラーで失敗し、ユーザーは問題の npm コマンドを sudo するでしょう。
  • install を使用しないでください。 コンパイルには .gyp ファイルを、それ以外のものには prepublish を使用します。 apreinstall やインストールスクリプトを明示的に設定する必要はほとんどないはずです。 もしそうするならば、他の選択肢がないかどうか考えてみてください。 install または preinstall スクリプトの唯一の有効な使用方法は、ターゲットアーキテクチャ上で行わなければならないコンパイルです。
  • See Also

    • npm run-script
    • package.json
    • npm developers
    • npm install

    コメントを残す コメントをキャンセル

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    アーカイブ

    • 2022年1月
    • 2021年12月
    • 2021年11月
    • 2021年10月
    • 2021年9月

    メタ情報

    • ログイン
    • 投稿フィード
    • コメントフィード
    • WordPress.org
    • DeutschDeutsch
    • NederlandsNederlands
    • SvenskaSvenska
    • DanskDansk
    • EspañolEspañol
    • FrançaisFrançais
    • PortuguêsPortuguês
    • ItalianoItaliano
    • RomânăRomână
    • PolskiPolski
    • ČeštinaČeština
    • MagyarMagyar
    • SuomiSuomi
    • 日本語日本語

    Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress