【问题标题】:Installing NPM Modules via the Frontend通过前端安装 NPM 模块
【发布时间】:2021-06-17 06:39:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js npm npm-install npm-scripts


    【解决方案1】:

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

    您要查找的主要是spawn()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);
    });
    

    【讨论】:

      【解决方案2】:

      您可以查看 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()

      【讨论】:

        【解决方案3】:

        通过“前端”安装 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
        • no .exec 是正确的,因为它正在生成一个 bash 脚本来初始化 npm
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-11
          • 2020-03-12
          • 2012-03-11
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多