Maison > interface Web > js tutoriel > Explication détaillée de l'utilisation de Node.js pour écrire des instructions de génération multiplateforme

Explication détaillée de l'utilisation de Node.js pour écrire des instructions de génération multiplateforme

高洛峰
Libérer: 2017-02-15 17:25:24
original
2606 Les gens l'ont consulté

La chose la plus puissante à propos de Node.js est qu'il est « multiplateforme ». Avec un peu de soin lors du codage, votre code fonctionnera sur les plates-formes Windows, Linux et OSX. L'article suivant explique principalement comment utiliser Node.js pour écrire des déclarations d'apparition multiplateformes. Les amis dans le besoin peuvent s'y référer.

Préface

Node.js est multiplateforme, ce qui signifie qu'il peut fonctionner sur les plateformes Windows, OSX et Linux. De nombreux développeurs Node.js développent sur OSX puis déploient le code sur des serveurs Linux. Étant donné qu'OSX et Linux sont basés sur Unix, ils ont beaucoup en commun. Windows est également une plate-forme officiellement prise en charge pour Node.js. Tant que vous écrivez le code correctement, vous pouvez l'exécuter sur différentes plates-formes sans aucune pression.

Il existe une fonction spawn sous le module child_process de Node.js, qui peut être utilisée pour appeler des commandes sur le système. Par exemple, sous Linux, macOS et d'autres systèmes, nous pouvons exécuter

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

spawn('npm', {
 stdio: 'inherit'
});
Copier après la connexion

pour appeler la commande npm.

Cependant, la même instruction signalera une erreur lors de son exécution sous 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
Copier après la connexion

Parce que sous Windows, lorsque nous exécutons npm, nous exécutons en fait le lot npm.cmd, et sous Windows, le traitement par lots .cmd , .bat ne peut pas être exécuté indépendamment de l’interpréteur cmd.exe.

Par conséquent, nous devons appeler explicitement cmd

spawn('cmd', ['/c', 'npm'], {
 stdio: 'inherit'
});
Copier après la connexion

ou utiliser lors de l'appel de la fonction spawn, définissez l'option shell sur true pour Appelez implicitement cmd (cette option a été ajoutée à partir de la version Node.js v6)

spawn('npm', {
 stdio: 'inherit',
 shell: true
});
Copier après la connexion

De plus, bien qu'il ne soit pas nécessaire de la définir sous Linux, Option Shell macOS et autres systèmes, la commande peut être exécutée normalement ; définir Shell sur true n'entravera pas l'exécution de la commande, mais générera un processus shell inutile supplémentaire, affectant les performances.

Par conséquent, si vous souhaitez écrire une commande d'apparition multiplateforme sans ajouter de surcharge supplémentaire, vous pouvez l'écrire comme ceci

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

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

Module tiers cross-spawn


Concernant la méthode d'écriture multiplateforme de la fonction spawn, en plus d'effectuer le traitement lors de l'écriture du code vous-même, il existe également des modules tiers qui encapsulent le détails pertinents, tels que le cross-spawn.

En utilisant ce module, lorsque vous appelez la fonction spawn, vous pouvez automatiquement décider de générer ou non un shell pour exécuter la commande donnée en fonction de la plate-forme en cours d'exécution.

De plus, il peut également

  • prendre en charge les versions Node.js inférieures à la v6 (l'utilisation de l'option shell nécessite au moins Node.js v6

  • Prise en charge multiplateforme de shebang
  • Échapper plus facilement aux caractères dans les commandes et les paramètres.

  • Installation

npm install cross-spawn
Copier après la connexion

Utilisation

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

spawn('npm', {
 stdio: 'inherit'
});
Copier après la connexion


Pour des explications plus détaillées sur l'utilisation de Node.js pour écrire des instructions de spawn multiplateformes, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal