Pracuję nad aplikacją, w której chciałbym móc instalować moduły NPM za pośrednictwem frontendu. Nie mam jednak pojęcia, jak to zrobić. Oznacza to, że wiem, jak wykonywać akcje CRUD za pośrednictwem interfejsu, ale nie wiem, jak ani wchodzić w interakcje z wierszem poleceń, ani uruchamiać funkcji wiersza poleceń za pośrednictwem interfejsu.

Czy istnieją pakiety, które mogą w tym pomóc, czy jest to jakoś wbudowane w Node.js?

Krótko mówiąc, jak mogę połączyć frontend z backendem w taki sposób, aby zainstalować pakiet NPM?

-1
Moshe 17 czerwiec 2021, 09:39

4 odpowiedzi

Najlepsza odpowiedź

Potrzebujesz modułu child_process. Jest wbudowany, więc nie musisz instalować żadnego dodatkowego modułu.

Najczęściej szukasz spawn() lub exec().

Na przykład, jeśli chcesz uruchomić npm install some_module, możesz:

const { exec } = require('child_process');

let command = 'npm install some_module';
let options = { cwd: '/path/to/node/project' };

exec(command, options, (error, stdout, stderr) => {
    // Do anything you want with program output here:
    console.log('output:', stdout, stderr);
});
2
slebetman 17 czerwiec 2021, 06:53

Możesz sprawdzić dokumentację child_process w Node JS: Procedura dziecka

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.on('close', (code) => {
   console.log(`child process exited with code ${code}`);
});

Kluczową różnicą między exec() i spawn() jest sposób, w jaki zwracają dane. Ponieważ exec() przechowuje wszystkie dane wyjściowe w buforze, zajmuje więcej pamięci niż funkcja spawn(), która przesyła dane wyjściowe w miarę ich pojawiania się.

Ogólnie rzecz biorąc, jeśli nie oczekujesz zwracania dużych ilości danych, dla uproszczenia możesz użyć funkcji exec(). Dobrymi przykładami przypadków użycia są tworzenie folderu lub uzyskiwanie statusu pliku. Jeśli jednak oczekujesz dużej ilości danych wyjściowych z twojego polecenia, powinieneś użyć spawn()

1
Harshit Rastogi 17 czerwiec 2021, 06:55

Najłatwiejszym sposobem zainstalowania pakietu npm za pośrednictwem „frontonu” jest posiadanie węzła odradzania npm jako procesu podrzędnego na podstawie nazwy pakietu podanej przez klienta.

var child = require('child_process').exec(`npm i ${package_name}`);

child.on('exit',function(){

    //npm finished

});

Powinno to zainstalować moduł, biorąc pod uwagę, że nazwa_pakietu jest nazwą pakietu npm, w tym samym katalogu, w którym działa skrypt. Jeśli chodzi o pobranie nazwy pakietu z interfejsu użytkownika na zaplecze, można to zrobić na kilka różnych sposobów że.

1
KCGD 17 czerwiec 2021, 06:57

Nie możesz uruchomić swojej aplikacji backendowej bez zainstalowanych modułów NPM, myślę, że możesz zrobić zwykły plik nodejs bez żadnych modułów, który otrzyma argumenty po wywołaniu i możesz użyć tych argumentów do wymaganych modułów, ponieważ ten plik będzie działał tylko z podstawowymi modułami

0
hsdmedia 17 czerwiec 2021, 06:54