我有一个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'已被添加到包含路径。
我错过了什么?
答案 0 :(得分:0)
这实际上是Node.js的常见问题,我刚刚添加了node.js
标记。
简而言之,你应该用Node.js方式,而不是Eclipse方式。
现在在另一个Nodeclipse项目中,我将项目x添加为'项目' '包含路径'的标签属性。
这就是您习惯使用Eclipse JDT for Java的原因 对于Node.js,它应该在没有任何IDE的情况下工作:
npm install . -g
然后在项目y
npm install x --save
其他方式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;
}