【问题标题】:where should a module write files?模块应该在哪里写入文件?
【发布时间】:2017-06-06 12:11:18
【问题描述】:

我编写了一个 CLI 模块 wikidata-cli,它对于某个命令 (wd props) 将结果缓存为模块目录中的文件:node_modules/wikidata-cli/props/some-file。它在我的本地设置中工作,其中 node 和 npm 安装在我的主文件夹中(使用nvm),但是其他人从他们的包管理器中安装了 node/npm,可能具有 sudo 权限,遇到issues:一旦安装,模块失去了修改模块目录的权限,他们得到了EACCES: permission denied, open '/usr/lib/node_modules/wikidata-cli/props/de.json'的错误

我尝试在安装后脚本期间更改访问权限 - "postinstall": "mkdir -p props && chown -R 666 props" - 但必须 revert 它阻止任何安装并出现 operation forbidden 错误。

有什么线索可以让这种文件以跨平台兼容的方式编写吗?

【问题讨论】:

    标签: node.js npm command-line-interface file-permissions


    【解决方案1】:

    如果您正在寻找能够写入文件的代码,无论哪个用户运行它,那么实际上只有一个答案:当前用户 a) 保证能够写入的唯一文件夹,并且b) 不会遇到不同用户访问相同路径的冲突,是用户自己的主目录。

    您可以使用类似的方法来导出当前用户绝对可以访问的路径:

    var homePath = process.env.HOME || process.env.USERPROFILE; // POSIX || Win32
    
    var moduleDataPath = path.join(homePath, ".wikidata-cli");
    
    if (!fs.existsSync(moduleDataPath))
        fs.mkdirSync(moduleDataPath);
    

    【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多