Лучшие практики для включения проектов в проект Nodeclipse

У меня есть проект Nodeclipse x, который можно рассматривать как библиотеку в форме файлов JavaScript. У него есть корневая папка: 'r'. В этой папке есть файл index.js.

Типичный модуль, использующий x, начинается с: var r = require('r');.

Это хорошо работает при запуске Node.js из строки cmd, просто добавляя полный путь к 'r' в NODE_PATH.

Теперь в другом проекте Nodeclipse y я добавляю проект x в качестве ссылки на вкладке "projects" в свойствах "Включить путь".

Я ожидаю, что Nodeclipse сделает волшебство, добавив исходные папки x к путям включения y при запуске проекта. Если нет, какой смысл добавлять проект?

Однако при нажатии: var r = require ('r'); Node.js жалуется, что не может найти 'r'. Войдя в исходный код для 'require', очевидно, что ни один из исходных путей проекта 'x' не был добавлен к пути include.

Что мне не хватает?

2 ответа

Для чего это стоит, я нашел решение. Моя структура проекта состоит из 3 корневых папок: - сгенерирован - основной - проверить все, находящиеся в папке 'src'.

Я создал скрипт: exploded.js, который находится в папке src. Все мои тестовые сценарии начинаются с: "require('../../exploded') (# of ../ зависит от глубины) Этот сценарий переопределяет 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;
}  

На самом деле это общий вопрос Node.js, и я только что добавил node.js тег.

Короче говоря, вы должны сделать это Node.js, а не Eclipse.

Теперь в другом проекте Nodeclipse y я добавляю проект x в качестве ссылки на вкладке "projects" в свойствах "Включить путь".

Это то, к чему вы привыкли использовать Eclipse JDT для Java.
Для Node.js он также должен работать без какой-либо IDE:

  • Использовать конкретное состояние проекта Y

из проекта х до

npm install . -g

тогда в проекте у

npm install x --save
  • Использовать последний проект Y

Другой способ это require(path/to/project_x)

или в проекте у

npm link path/to/project_x

Просто изучите Node.js, Eclipse и, конечно, Nodeclipse:)

Плагины Nodeclipse "Enide Studio 2014" имеют встроенный терминал:

Другие вопросы по тегам