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を使用して何かを一緒にハックできる場合があります。パスは yaml-config モジュールの場所に相対的であり、../../../src/app.yamlyaml-config の lib 構造と比較してプロジェクトの構造に依存するようなものになる可能性が最も高いでしょう。

相対的なものをいじりたい場合は、次のようになります(編集:以下の括弧を修正):

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