ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js を使用してクロスプラットフォームの spawn ステートメントを作成する方法の詳細な説明

Node.js を使用してクロスプラットフォームの spawn ステートメントを作成する方法の詳細な説明

高洛峰
高洛峰オリジナル
2017-02-15 17:25:242578ブラウズ

Node.js の最も強力な点は「クロスプラットフォーム」です。コーディング時に少し注意すれば、コードは Windows、Linux、OSX プラットフォームで動作します。以下の記事では、Node.js を使用してクロスプラットフォームのスポーン ステートメントを作成する方法を主に紹介します。必要な友人は参照してください。

はじめに

Node.js はクロスプラットフォームです。つまり、Windows、OSX、Linux プラットフォームで実行できます。多くの Node.js 開発者は OSX で開発し、コードを Linux サーバーにデプロイします。 OSX と Linux はどちらも Unix をベースにしているため、多くの共通点があります。 Windows は、Node.js が公式にサポートされているプラ​​ットフォームでもあり、コードを正しい方法で記述すれば、何のストレスもなくさまざまなプラットフォームで実行できます。

Node.js の child_process モジュールの下に spawn 関数があり、これを使用してシステム上のコマンドを呼び出すことができます。たとえば、Linux、macOS、その他のシステムでは、

const spawn = require('child_process').spawn;

spawn('npm', {
 stdio: 'inherit'
});

を実行して呼び出すことができます。 npmコマンド。

ただし、同じステートメントを Windows で実行するとエラーが報告されます。

Error: spawn npm ENOENT
 at exports._errnoException (util.js:855:11)
 at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
 at onErrorNT (internal/child_process.js:344:16)
 at nextTickCallbackWith2Args (node.js:455:9)
 at process._tickCallback (node.js:369:17)
 at Function.Module.runMain (module.js:432:11)
 at startup (node.js:141:18)
 at node.js:980:3

Windows では npm を実行すると実際には npm.cmd のバッチ処理が実行され、Windows では .cmd、.bat のバッチ処理が cmd.exe から分離できないためです。 この説明 サーバーは独立して実行されます。 。

そのため、明示的に cmd

spawn('cmd', ['/c', 'npm'], {
 stdio: 'inherit'
});

を呼び出すか、spawn 関数を呼び出すときに使用し、暗黙的に cmd を呼び出すためにシェル オプションを true に設定する必要があります (このオプションは Node.js v6 バージョンから追加されました)

spawn('npm', {
 stdio: 'inherit',
 shell: true
});

さらに、Linux、macOS、その他のシステムではシェル オプションを設定する必要はありませんが、シェルを true に設定してもコマンドの実行は妨げられませんが、追加のコマンドが生成されます。不要なシェルプロセスが発生し、パフォーマンスに影響を与えます。

そのため、追加のオーバーヘッドを加えずにクロスプラットフォームの spawn コマンドを書きたい場合は、次のように書くことができます

const process = require('process');
const { spawn } = require('child_process');

spawn('npm', {
 stdio: 'inherit',
 // 仅在当前运行环境为 Windows 时,才使用 shell
 shell: process.platform === 'win32'
});

サードパーティモジュールのcross-spawn

クロスプラットフォームの書き込みについてspawn 関数のメソッド。自分でコードを記述するときに処理を実行することに加えて、crossspawn など、関連する詳細をカプセル化するサードパーティのモジュールもあります。

このモジュールを使用すると、spawn 関数を呼び出すときに、現在実行中のプラットフォームに基づいて、指定されたコマンドを実行するシェルを生成するかどうかを自動的に決定できます。

さらに、v6 より前の Node.js バージョンもサポートできます (シェル オプションを使用するには、少なくとも Node.js v6 が必要です)。

  • コマンドとパラメーターのシバンをサポートします。文字をエスケープする方が便利です。

  • インストール
  • npm install cross-spawn

  • 使用法

const spawn = require('cross-spawn');

spawn('npm', {
 stdio: 'inherit'
});

Node.jsを使用してクロスプラットフォームのスポーンステートメントを作成する方法の詳細な記事については、PHP中国語Webサイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。