将项目包含到Nodeclipse项目的最佳实践

时间:2014-11-26 22:45:23

标签: node.js include project nodeclipse

我有一个Nodeclipse项目x,它可以被视为一个库,以javascript文件的形式。它有一个根文件夹:' r'。这个文件夹有一个' index.js'文件。

使用x的典型模块起始于:var r = require(' r');.

通过简单地将完整路径添加到' r'来自cmd行运行Node.js时,这很有效。到NODE_PATH。

现在在另一个Nodeclipse项目中,我将项目x添加为'项目' '包含路径'的标签属性。

我期待Nodeclipse能够在运行项目时将x的源文件夹添加到y的包含路径中。如果不是添加项目的用途?

然而,当点击:var r = require(' r');, Node.js抱怨它无法找到' r'。进入'源代码需要',显然没有项目的源路径' x'已被添加到包含路径。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

这实际上是Node.js的常见问题,我刚刚添加了node.js标记。

简而言之,你应该用Node.js方式,而不是Eclipse方式。

  

现在在另一个Nodeclipse项目中,我将项目x添加为'项目' '包含路径'的标签属性。

这就是您习惯使用Eclipse JDT for Java的原因 对于Node.js,它应该在没有任何IDE的情况下工作:

  • 使用项目Y的具体状态
来自项目x的

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" plugins已集成终端:

答案 1 :(得分:0)

为了它的价值,我找到了解决方案。 我的项目结构包含3个根文件夹:   - 生成   - 主要   - 测试 所有人都住在文件夹' src'。

我创建了一个脚本:explosion.js,它位于src文件夹中。 我的所有测试脚本都以:"要求(' ../../爆炸')(#...取决于深度) 此脚本会覆盖Module._resolveLookupPaths并使用主文件夹和生成的文件夹中的相应路径丰富候选路径列表。

埃里克

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;
}