1
$ node run.js
[Sat May 11 2013 19:13:06 GMT-0400 (EDT)] ERROR { [Error: Cannot find module './app.yaml'] code: 'MODULE_NOT_FOUND' }
env = development
{}
env = development
{ redis: { port: 6379, host: '127.0.0.1', password: '', db: 1, options: {} } }
[ '.npmignore',
  'app.yaml',
  'config',
  'example',
  'freq.js',
  'node_modules',
  'run.js',
  'test.js',
  'whereami.js' ]

下面的 node.js 代码的输出

var fs = require('fs')

fs.readdir('.', function(err, files) {
        console.log(files);
});

var config = require('yaml-config');
var env = 'development';

var settings = config.readConfig('./app.yaml');
// path from your app root without slash
console.log('env = %s', env);
console.log(settings);

settings = config.readConfig('/Users/shawn/dev/node.js/example/app.yaml');
console.log('env = %s', env);
console.log(settings);

布兰登,公平点。我正在使用 npm 页面中的示例。我已经简化了代码并结合了我的文件系统检查。

4

1 回答 1

1

过去我遇到过使用require()和相对路径动态“加载”配置文件的模块的问题。不过,我只在 Mac OS X 上遇到过这些问题,而在我的个人 Ubuntu 机器上从来没有。我不在 Windows 中进行 node.js 开发,所以我无法与那个环境交谈。

我遇到的问题是模块加载相对于require()调用函数的位置。以下是您可以轻松解决该问题的方法:

var settings = config.readConfig(require.resolve('./app.yaml'));

您可能可以使用path.relative来破解某些东西,只是为了测试传递相对路径是否也可以解决问题。路径 woule 与 yaml-config 模块的位置相关,并且很可能类似于../../../src/app.yaml取决于您的项目结构与 yaml-config 的 lib 结构相比。

如果你想玩弄相关的东西,它看起来像这样(编辑:下面的固定括号):

var relative = path.relative(require.resolve('yaml-config'), './app.yaml');
var settings = config.readConfig(relative);
于 2013-05-11T23:30:49.460 回答