gpt4 book ai didi

node.js - Sudo 破坏相对路径的 Node 模块解析

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:00 25 4
gpt4 key购买 nike

我有一个结构如下的 Node 项目

/mymodule
--/bin
--/myscript
--/package.json
.
.
.

bin/myscript 看起来像这样:

#!/usr/bin/env node

const mymodule = require('..').mymodule;

当我以普通用户身份启动脚本时,一切正常。当我尝试使用 sudo 运行脚本时,模块解析因错误而中断

module.js:471
throw err;
^

Error: Cannot find module '../'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/mymodule/bin/myscript)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)

为什么使用 sudo 运行时模块解析失败?

最佳答案

事实证明,问题不在于模块加载,而在于 npm 默认情况下在运行安装前/安装后脚本时会降低其自身的权限。结果,该模块实际上丢失了,因为安装后脚本没有创建构建目录。安装项目时我错过了一个警告:

npm WARN lifecycle <my module>@<my version>~postinstall: cannot run in wd

不使用 sudo 运行不是一个选项,因此我能够通过使用 npm 的 --unsafe-perm 标志来解决此问题:

$ npm install --unsafe-perm

关于node.js - Sudo 破坏相对路径的 Node 模块解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47567384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com