2014-11-26 6 views
1

У меня есть проект Nodeclipse x, который можно рассматривать как библиотеку в виде файлов javascript. У этого есть корневая папка: 'r'. Эта папка имеет файл index.js.Лучшая практика для включения проектов в проект Nodeclipse

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

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

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

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

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

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

ответ

0

Это на самом деле общий вопрос Node.js, и я просто добавил тег node.js.

Вкратце вы должны сделать это путь Node.js, а не путь Eclipse.

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

Это то, к чему вы привыкли использовать 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" plugins имеет встроенный терминал:

+0

Привет Павел, спасибо за ваш ответ не уверен, однако, что этот подход адреса мое требование: что делать, если я вношу изменения в x? Кажется, мне нужно перезапустить 2 install cmds каждый раз, когда я делаю изменения (не очень удобно, если я может комментировать). – user2969819

+0

Кроме того, я не могу заставить выше работать. Мне удалось установить x: sudo npm install. -g -> [email protected]/usr/local/lib/node_modules/antlr4, но когда я пытаюсь зарегистрировать его для y: npm install [email protected] --save Я получаю ошибку E404 – user2969819

+0

Извините, если выше звуки немного отрицательный, я очень доволен nodeclipse до сих пор – user2969819

0

для чего это стоит, я нашел решение. моя структура проекта состоит из 3 корневых папок: - сгенерировано - main - test все проживающие под папкой '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; 
}