$ 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页面中的示例。我简化了代码并结合了我的文件系统检查。
答案 0 :(得分:1)
过去我遇到过使用require()
和相对路径动态“加载”配置文件的模块的问题。我在Mac OS X上只遇到过这些问题,而且从来没有在我的个人Ubuntu机器上。我不在Windows中进行node.js开发,所以我不能说那个环境。
我遇到的问题是调用require()
函数的module loads relative。以下是您可以轻松解决该问题的方法:
var settings = config.readConfig(require.resolve('./app.yaml'));
您可以使用path.relative一起破解某些内容,以测试传递相对路径是否也可以解决问题。该路径应该与yaml-config模块的位置相关,并且很可能类似于../../../src/app.yaml
,这取决于项目的结构与yaml-config的lib结构相比。
如果你想玩相关的东西,它会看起来像这样(编辑:下面的固定括号):
var relative = path.relative(require.resolve('yaml-config'), './app.yaml');
var settings = config.readConfig(relative);