Node.js 如何在全局安装的节点模块中写入文件? 上下文

Node.js 如何在全局安装的节点模块中写入文件? 上下文,node.js,permissions,npm,Node.js,Permissions,Npm,我正在开发一个安装为CLI可执行文件的。因此,我将其打包,以便与NPM一起使用,并安装它 问题 但是,作为CLI程序,我希望写入日志文件。这在本地安装上运行良好,但在全局安装中当然不太好:NPM将程序放置在/usr/local/lib/…中,它必须以sudo运行才能在那里编写 然后,当用户尝试运行该工具时,由于EACCES:无法创建日志文件夹和文件而失败 采取的步骤 我成功地使用创建了日志目的地,同时仍然使用su(mkdir log&&touch log/execution.log),但这些文件

我正在开发一个安装为CLI可执行文件的。因此,我将其打包,以便与NPM一起使用,并安装它

问题 但是,作为CLI程序,我希望写入日志文件。这在本地安装上运行良好,但在全局安装中当然不太好:NPM将程序放置在
/usr/local/lib/…
中,它必须以
sudo
运行才能在那里编写

然后,当用户尝试运行该工具时,由于
EACCES
:无法创建日志文件夹和文件而失败

采取的步骤 我成功地使用创建了日志目的地,同时仍然使用su(
mkdir log&&touch log/execution.log
),但这些文件随后归
任何人所有,并且可能无法被工具打开。问题有点转移,但最终还是一样的

问题: 有没有办法赋予NPM模块在其自己的目录中写入的权限?

更具体的问题 你对我的情况有什么建议?我想到了以下解决办法:

  • 在执行CWD中写入日志文件。这很难看,也不太安全,因为CWD也不能写
  • 将日志文件写入预设的可写日志文件,例如
    ~/.mytool/log
    ,但我不喜欢将文件散布到用户的机器上
  • 向用户询问日志文件目标。非常烦人
  • chmod 666
    全局日志文件。不那么丑陋但不安全
  • 是否有处理此类问题的常规做法?

    我希望:

    • 默认登录CWD
    • 日志路径可以作为参数给出(如
      go-l/path/to/Log
    • 如果日志文件不可写,则出错
      • 我希望:

        • 默认登录CWD
        • 日志路径可以作为参数给出(如
          go-l/path/to/Log
        • 如果日志文件不可写,则出错

        否,无法将自己目录中的写入权限授予全局安装的节点模块

        实际上,为了允许全局安装,即能够在
        /usr/local/lib
        中写入,NPM必须作为root用户通过
        sudo
        运行。但是,在这样做时,NPM将:

        从版本0.3开始,建议以root用户身份运行npm。这允许npm在运行任何包构建或测试命令之前将用户标识符更改为
        nobody
        用户

        所有都以无人身份运行,因此无法覆盖此设置

        这是一项安全功能,还可防止对已安装模块进行任何未经授权的安装后修改,从而使已安装模块变得可信



        您可能应该尝试为日志找到一个在业务逻辑中有意义的默认位置。定义一个用户可重写(通过CLI开关)的全局可写日志,如
        ~/。您的工具/log
        会很好,但节点不会展开
        ~
        ,因此查找跨平台全局日志目标似乎有点困难。

        否,无法将自己目录中的写入权限授予全局安装的节点模块

        实际上,为了允许全局安装,即能够在
        /usr/local/lib
        中写入,NPM必须作为root用户通过
        sudo
        运行。但是,在这样做时,NPM将:

        从版本0.3开始,建议以root用户身份运行npm。这允许npm在运行任何包构建或测试命令之前将用户标识符更改为
        nobody
        用户

        所有都以无人身份运行,因此无法覆盖此设置

        这是一项安全功能,还可防止对已安装模块进行任何未经授权的安装后修改,从而使已安装模块变得可信



        您可能应该尝试为日志找到一个在业务逻辑中有意义的默认位置。定义一个用户可重写(通过CLI开关)的全局可写日志,如
        ~/。您的工具/log
        会很好,但节点不会展开
        ~
        ,因此查找跨平台全局日志目标似乎有点困难。

        仍然是这样吗?@roecruw什么?NPM仍然降级?是:。该节点不展开
        ~
        ?是:只需在终端上键入
        node-e'console.log(需要(“路径”).resolve(“~”)
        。仍然是这样吗?@roecruw什么?NPM仍然降级?是:。该节点不展开
        ~
        ?是:只需在终端上键入
        node-e'console.log(需要(“路径”).resolve(“~”)