【问题标题】:How do I globally install a Node.js command-line script on the server?如何在服务器上全局安装 Node.js 命令行脚本?
【发布时间】:2021-10-08 10:01:30
【问题描述】:

作为原型,我编写了一个简单的 Node.js 命令行脚本,它加载 .txt 文件并输出内容。我读过很多文章,建议 Node.js 脚本通常通过命令行执行并且应该全局安装,所以这就是我所采取的方向,即使有其他技术。

为了这个查询,我全局安装的命令叫做my-prototype

这一切在桌面上都可以正常工作,但我打算使用 Express 在服务器上托管这个原型。

我如何全局安装 my-prototype 在服务器上,如果可能的话,我是否能够以与本地测试相同的方式执行它,作为子进程?:

const { execSync } = require('child_process')
const output = execSync(`${process.execPath} my-prototype`)
console.log(output.toString())

我不完全确定全局安装命令行脚本是否适用于服务器,我想知道这是否仅适用于桌面。

【问题讨论】:

  • 为什么要将它托管在快速服务器上?比如你到底想达到什么目的?
  • 从您的问题中我想我了解到,您正在考虑创建一个节点包。
  • 您可以在 Google 上查看“如何使用节点创建 npm 包”。
  • 嗨@EAzevedo,不,这不是我想要做的,但感谢您强调我的原始查询不够清楚。让我解释一下……如果您能想象一下,在您的桌面上进行开发期间,我们运行npm i,它会安装我们所有的包依赖项。我想在服务器上做同样的事情,以便我的服务器端代码可以使用已安装的模块。只是,就我而言,我希望使用node my-prototype,而不是require('my-prototype'),在全局范围内安装我的模块并直接定位它。

标签: javascript node.js server command-line-interface npm-install


【解决方案1】:

如果你只需要输出内容,那么你不需要控制台,或者更确切地说:你只需要它一次,运行nodejs

const fs = require('fs');

const express = require('express');
const app = express();

//

app.get('/', async(req, res)=>{
    let fileContains = fs.readFileSync('./package.json', 'utf8');
    try{
        fileContains = JSON.parse(fileContains);
    }catch(e){}
    res.json(fileContains);
});

//

app.listen(80);

另外,阅读更多关于pm2 module的信息,它非常有用

【讨论】:

  • 嗨 Vadim,虽然这不是我想要的,但它非常有助于描述我想要实现的目标 - 谢谢!我不想调用fs.readFileSync(),而是调用我自己的全局命令;例如let fileContains = execSync('node my-prototype'),正如我所期望的那样,my-prototype 不仅仅只是稍后读取文件。
  • 嗨 Vadim,还请在 OP 上查看我给 EAzevedo 的消息,它更好地解释了我希望如何安装和使用我的模块。 Vadim 的评论强调了我的 OP 可能混淆的地方。抱歉,我自己也很困惑,对 Node.js 的一些实现也很陌生。
猜你喜欢
  • 2019-04-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多