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 모듈 아래에는 시스템에서 명령을 호출하는 데 사용할 수 있는 생성 함수가 있습니다. 예를 들어 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:3Windows에서는 npm을 실행하면 실제로 npm.cmd 배치를 실행하고, Windows에서는 .cmd, .bat 배치 처리를 할 수 없기 때문입니다. cmd.exe 인터프리터와 독립적으로 실행됩니다. 따라서 명시적으로 cmd를 호출해야 합니다
spawn('cmd', ['/c', 'npm'], { stdio: 'inherit' });또는 generate 함수를 호출할 때 사용하고, 암시적으로 호출하려면 쉘 옵션을 true로 설정하세요. 로컬에서 cmd (이 옵션은 Node.js v6 버전에서 추가되었습니다)
spawn('npm', { stdio: 'inherit', shell: true });또한 Linux, macOS 및 Linux에서는 셸 옵션을 설정할 필요가 없지만 다른 시스템에서는 명령을 정상적으로 실행할 수도 있습니다. 쉘을 true로 설정하면 명령 실행이 방해되지 않지만 불필요한 쉘 프로세스가 추가로 생성되어 성능에 영향을 미칩니다. 그러므로 오버헤드를 추가하지 않고 크로스 플랫폼 스폰 명령을 작성하려면 이렇게 작성하면 됩니다.
const process = require('process'); const { spawn } = require('child_process'); spawn('npm', { stdio: 'inherit', // 仅在当前运行环境为 Windows 时,才使用 shell shell: process.platform === 'win32' });셋째 -party module cross-spawn
npm install cross-spawn사용법
const spawn = require('cross-spawn'); spawn('npm', { stdio: 'inherit' });