通过前端安装 NPM 模块

Installing NPM Modules via the Frontend

我正在开发一个应用程序,我希望能够通过前端安装 NPM 模块。不过,我不知道该怎么做。也就是说,我知道如何通过前端执行 CRUD 操作,但我不知道如何通过前端与命令行交互或 运行 命令行功能。

是否有软件包可以帮助解决这个问题,或者它是否以某种方式内置到 Node.js 中?

简而言之,如何以可以安装 NPM 包的方式将前端连接到后端?

你要的是child_process模块。它是内置的,因此您不需要安装任何额外的模块。

您要找的大部分是 spawn() or exec().

例如,如果你想 运行 npm install some_module 你可以这样做:

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);
});

你不能运行你的后端应用程序没有安装 NPM 模块,我认为你可以做的一件事是制作一个没有任何模块的普通 nodejs 文件,它会在调用时接收 args,并且你可以将该参数用于所需的模块,因为该文件将 运行 仅包含核心模块

您可以在 Node JS 中查看 child_process 的文档: Child Process

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}`);
});

exec() 和 spawn() 之间的主要区别在于它们 return 数据的方式。由于 exec() 将所有输出存储在缓冲区中,因此它比 spawn() 占用更多内存,后者在输出出现时将其流式传输。

一般来说,如果您不希望 return编辑大量数据,可以使用 exec() 来简化操作。用例的好例子是创建文件夹或获取文件的状态。但是,如果您期望命令有大量输出,那么您应该使用 spawn()

通过“前端”安装 npm 包的最简单方法是让节点根据客户端提供的包名称生成 npm 作为子进程。

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

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

    //npm finished

});

这应该安装模块,因为 package_name 是 npm 包的名称,在与脚本 运行 相同的目录中。就从前面获取包名称而言从端到后端,有几种不同的方法可以做到这一点。