模块应该在哪里写文件?

时间:2017-01-21 16:27:21

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

我编写了一个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错误。

任何线索都是这种文件应该以跨平台兼容的方式编写?

1 个答案:

答案 0 :(得分: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);