Node.js Sudo中断相对路径的节点模块分辨率

Node.js Sudo中断相对路径的节点模块分辨率,node.js,sudo,Node.js,Sudo,我有一个节点项目,其结构如下 /mymodule --/bin --/myscript --/package.json . . . bin/myscript如下所示: #!/usr/bin/env node const mymodule = require('..').mymodule; 当我以普通用户的身份启动脚本时,一切正常。当我尝试使用sudo运行脚本时,模块解析会因错误而中断 module.js:471 throw err; ^ Error: Cannot fi

我有一个节点项目,其结构如下

/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)
module.js:471
犯错误;
^
错误:找不到模块“../”
在Function.Module.\u解析文件名(Module.js:469:15)
在Function.Module.\u加载(Module.js:417:25)
at Module.require(Module.js:497:17)
根据需要(内部/module.js:20:19)
反对。(/mymodule/bin/myscript)
在模块处编译(Module.js:570:32)
在Object.Module.\u extensions..js(Module.js:579:10)
在Module.load(Module.js:487:32)
在tryModuleLoad时(module.js:446:12)
在Function.Module.\u加载(Module.js:438:3)

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

事实证明,问题不在于模块加载,而在于npm在运行安装前/安装后脚本时默认会降级自己的权限。因此,该模块实际上丢失了,因为安装后脚本没有创建生成目录。安装项目时,我错过了spew中的警告:

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

您在shell上执行什么命令来运行脚本?如果在那里使用home-relative-path(使用~),则可能会导致问题。从项目目录中,我正在运行bin/myscript。发射过程中不涉及主路径。
$ npm install --unsafe-perm