Sudo打破相对path的节点模块分辨率

我有一个类似结构的节点项目

/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运行时模块parsing失败?

事实certificate,这个问题不是模块加载,而是npm默认情况下在运行前/后安装脚本时降级自己的权限。 因此,模块实际上是因为安装后脚本没有创build构build目录而丢失的。 在安装项目时,我错过了一个警告:

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

没有运行与sudo不是一个选项,所以我能解决这个问题,通过使用 – --unsafe-perm标志与npm:

 $ npm install --unsafe-perm