【发布时间】:2021-06-17 06:39:05
【问题描述】:
我正在开发一个应用程序,我希望能够通过前端安装 NPM 模块。不过,我不知道该怎么做。也就是说,我知道如何通过前端进行 CRUD 操作,但我不知道如何与命令行交互或通过前端运行命令行功能。
是否有包可以帮助解决这个问题,或者它是否以某种方式内置在 Node.js 中?
简而言之,如何将前端连接到后端,以便安装 NPM 包?
【问题讨论】:
标签: node.js npm npm-install npm-scripts
我正在开发一个应用程序,我希望能够通过前端安装 NPM 模块。不过,我不知道该怎么做。也就是说,我知道如何通过前端进行 CRUD 操作,但我不知道如何与命令行交互或通过前端运行命令行功能。
是否有包可以帮助解决这个问题,或者它是否以某种方式内置在 Node.js 中?
简而言之,如何将前端连接到后端,以便安装 NPM 包?
【问题讨论】:
标签: node.js npm npm-install npm-scripts
你想要的是child_process 模块。它是内置的,因此您无需安装任何额外的模块。
例如,如果你想运行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);
});
【讨论】:
您可以查看 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() 之间的主要区别在于它们返回数据的方式。由于 exec() 将所有输出存储在缓冲区中,因此它比 spawn() 更占用内存,后者在输出时进行流式传输。
一般来说,如果您不希望返回大量数据,则可以使用 exec() 来简化操作。用例的好例子是创建文件夹或获取文件的状态。但是,如果您希望命令有大量输出,那么您应该使用 spawn()
【讨论】:
通过“前端”安装 npm 包的最简单方法是根据客户端提供的包名称将 node spawn npm 作为子进程。
var child = require('child_process').exec(`npm i ${package_name}`);
child.on('exit',function(){
//npm finished
});
这应该安装模块,因为 package_name 是 npm 包的名称,在脚本运行的同一目录中。在从前端到后端获取包名方面,有几种不同方法。
【讨论】:
.exec还是应该是.spawn?
你不能在没有安装 NPM 模块的情况下运行你的后端应用程序,我认为你可以做的一件事是制作一个没有任何模块的普通 nodejs 文件,它会在调用时接收 args,你可以使用该 args必需的模块,因为该文件将仅使用核心模块运行
【讨论】: