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