1

私は Nodeclipse プロジェクト x を持っています。これはライブラリと見なすことができ、javascript ファイルの形式になっています。ルート フォルダー「r」があります。このフォルダーには「index.js」ファイルがあります。

x を使用する典型的なモジュールは、var r = require('r'); から始まります。

これは、「r」へのフル パスを NODE_PATH に追加するだけで、コマンド ラインから Node.js を実行するときにうまく機能します。

別の Nodeclipse プロジェクト y で、「インクルード パス」プロパティの「プロジェクト」タブに参照としてプロジェクト x を追加します。

プロジェクトの実行時に、Nodeclipse が x のソース フォルダーを y のインクルード パスに追加する魔法を実行することを期待しています。そうでない場合、プロジェクトを追加することの用途は何ですか?.

ただし、var r = require('r'); を押すと、Node.js は「r」が見つからないと文句を言います。「require」のソース コードに足を踏み入れると、プロジェクト「x」のソース パスがどれもインクルード パスに追加されていないことが明らかです。

私は何が欠けていますか?

4

2 に答える 2

0

それだけの価値があるため、解決策を見つけました。私のプロジェクト構造は 3 つのルート フォルダーで構成されています: - 生成 - メイン - フォルダー 'src' の下にあるすべてをテスト

私はスクリプトを作成しました: src フォルダーにある exposed.js です。すべてのテスト スクリプトは次のように始まります: "require('../../exploded') (../ の数は深さによって異なります)フォルダ。

エリック

Exploded.js コード (アップロードする方法が見つかりませんでした):

var path = require("path");
var root = path.dirname(module.filename);
var fs = require("fs");

function readSubDirs() {
    var _children = fs.readdirSync(root);
    var children = [];
    for(var i=0;i<_children.length;i++) {
        var _child = _children[i];
        if(_child!=="node_modules") {
            if(_child.indexOf(".")!==0) {
                var _path = root + path.sep + _child;
                var _isdir = fs.lstatSync(_path).isDirectory();
                if( _isdir )  {
                    children.push(_child);
                }
            }
        }
    }
    return children;
}
var children = readSubDirs();

var m = require("module").Module;
var old_resolveLookupPaths = m._resolveLookupPaths;

function new_resolveLookupPaths(request, parent) {
    var resolved = old_resolveLookupPaths(request, parent);
    var start = request.substring(0, 2);
    if (start === './' || start === '..') {
        // is the calling module in the same hierarchy as this?
        if(parent.filename.search(root)===0) {
            var dirpath = path.dirname(parent.filename);
            var subpath = dirpath.substring(root.length+1);
            var idx = subpath.indexOf(path.sep);
            var folder = subpath.substring(0, idx);
            subpath = subpath.substring(idx);
            var paths = resolved[1];
            var more = [];
            for(var i=0;i<paths.length;i++) {
                var _path = paths[i];
                if(_path.indexOf(root)===0) {
                    if(_path.indexOf(subpath)>root.length) {
                        for(var j=0;j<children.length;j++) {
                            var _child = children[j];
                            if( _child!==folder) {
                                var _fullpath = root + path.sep + _child + subpath;
                                var _exists = fs.existsSync(_fullpath);
                                if(_exists) {
                                    var _isdir = fs.lstatSync(_fullpath).isDirectory();
                                    if( _isdir )  {                             
                                        more.push(_fullpath);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            resolved[1] = paths.concat(more);
        }
    }
    return resolved;
}

if(m._resolveLookupPaths !== new_resolveLookupPaths) {
    m._resolveLookupPaths = new_resolveLookupPaths;
}  
于 2014-11-30T09:01:46.183 に答える
0

これは実際には Node.js の一般的な質問で、node.jsタグを追加しただけです。

つまり、Eclipse の方法ではなく、Node.js の方法で行う必要があります。

別の Nodeclipse プロジェクト y で、「インクルード パス」プロパティの「プロジェクト」タブに参照としてプロジェクト x を追加します。

これは、Eclipse JDT for Java の使用に慣れていることです。
Node.js の場合、IDE がなくても動作するはずです。

  • プロジェクト Y の特定の状態を使用するには

from プロジェクトエックスドゥ

npm install . -g

次にプロジェクトyで

npm install x --save
  • プロジェクト Y の最新のものを使用するには

他の方法でrequire(path/to/project_x)

またはプロジェクトyで

npm link path/to/project_x

Node.js、Eclipse、そしてもちろんNodeclipseを学ぶだけです:)

Nodeclipse「Enide Studio 2014」プラグインにはターミナルが統合されています。

于 2014-11-27T02:36:40.977 に答える