node.js - 模块应该在哪里写入文件?

标签 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 错误的安装。

有什么线索表明这种文件应该以跨平台兼容的方式编写吗?

最佳答案

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

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

var homePath = process.env.HOME || process.env.USERPROFILE; // POSIX || Win32

var moduleDataPath = path.join(homePath, ".wikidata-cli");

if (!fs.existsSync(moduleDataPath))
    fs.mkdirSync(moduleDataPath);

关于node.js - 模块应该在哪里写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781700/

相关文章:

node.js - 错误! oracledb 错误! NJS-067 : a pre-built node-oracledb binary was not found for darwin arm64

javascript - 使用 Function.bind 时 Node 转换流怪癖

javascript - 加载共享库时出错 : libgbm. so.1:无法打开共享对象文件:AWS EC2 实例上 Nodejs 中的 Puppeteer

node.js - 如何在单独执行 "npm install <package>"后运行安装后脚本

windows - 是命令提示符和 PowerShell 终端仿真器吗?

c# - 在 Mac 上的 VSCode 中构建 C# 代码

java - 使用 utf-8 代码页的 Windows 命令行问题

node.js - NodeJS 的 Github 操作 - 本地文件的 'Error: Cannot find module'

node.js - 在 Node.js 中使用 Promise 会使 Node 同步吗?

npm - Github Action在发布和发布之间有所不同