3

tmp3つのテストnode.jsモジュールがあるディレクトリがあります[mod0.js, mod1.js, mod2.js]

これらの3つのモジュールを配列にインポートして、その配列を返すための関数を作成しようとしています。REPLにドロップして、etcを使用して各ファイルをvar x = require("./tmp/mod0");問題なくインポートできます。

これを自動化するために次の関数を実行しようとすると、エラーが発生します[Error: Cannot fine module './tmp/mod0']

var _importFiles = function(path, files){
    var moduleList = []
    , trimmedName;

    files.forEach(function (element, index, array){
        if (_fs.lstatSync(path + "/" + element).isFile()){
            trimmedName =  element.substring(0, (element.length - 3));
            moduleList.push(require("./" + path + "/" + trimmedName));
        }
    });

    return moduleList;
};

パラメータとパラメータの出力を'tmp'渡します。pathfs.readdirSync(path)files

process.cwd();ブロック内をチェックするifと、REPLコンソールのチェックと一致します。

REPLで手動で実行したが、自動化されていない場合に、なぜそれが機能するのかを理解しようとしています。

4

1 に答える 1

1

私はこれに少しコードを変更しました:

var _fs = require('fs');
var path = process.cwd() + '/tmp'

var _importFiles = function(path, files){
    var moduleList = [], trimmedName;

    files.forEach(function (element, index, array){
        if (_fs.lstatSync(path + "/" + element).isFile()){
            trimmedName =  element.substring(0, (element.length - 3));
            moduleList.push(require("./" + path + "/" + trimmedName));
        }
    });

    return moduleList;
};

var imports = _importFiles('./tmp', _fs.readdirSync(path));
console.log(imports);

それは私に与えます:

$ node import.js
[ 'imported mod0 automatically', 'imported mod1 automatically' ]

modファイルはシンプルですmodule.exports = "imported mod(x) automatically";

これで、リターンリストに配列が追加されました。また; ディレクトリに読み取り権限があることを確認してください(確かにそうです)

于 2012-06-22T02:19:56.140 に答える