我正在构建一个os-agnostic npm
包,它使用了一些内部子模块。在我的Mac上,require
模块使用app-root-path就像这样:
var path = require('path');
var appRoot = require('app-root-path');
var packageJson = JSON.parse(fs.readFileSync(path.join(appRoot.path, 'node_modules', 'myModule', 'package.json')).toString());
这可以按预期工作。
但它在Linux上失败了(我认为它也在Windows上失败了)因为上面的app-root-path
包没有像在mac上那样返回正确的路径。
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT: no such file or directory, open '/usr/local/lib/node_modules/myModule/bin/node_modules/myModule/package.json'
at Error (native)
at Object.fs.openSync (fs.js:584:18)
at Object.fs.readFileSync (fs.js:431:33)
at Object.<anonymous> (/usr/local/lib/node_modules/myModule/bin/commands.js:247:33)
at Module._compile (module.js:425:26)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:138:18)
这是为什么?
如何在不担心主机操作系统(mac / linux / windows)的情况下使其正常工作?
注意,我确实在stackoverflow上使用了这个question上的答案/提示。