2014-11-11 5 views
0

У меня есть эта структура каталогов:Требуется модуль по отношению к исходному коду

project/ 
    mymodule.js 
    test/ 
    run.js 
    node_modules/ 
     canvas/ 

У меня есть код следующим образом:

run.js

var Canvas = require(__dirname+"/../mymodule"); 

mymodule.js

if (typeof require==='function' && typeof module==='object'){ 
    // when using mymodule with Node the 'canvas' module must be available 
    var canvas = require('canvas'); 
    module.exports = canvas; 
} else { 
    // code that works in a web browser, without Node 
} 

Результат node test/run.js: Error: Cannot find module 'canvas'.

Как я могу сделать это так, чтобы require от mymodule знает, как выглядит относительно исходного сценария? Или это противоречит тому, как работают модули узла? Должен ли я перемещать canvas (который используется только для тестирования на моем конце) из каталога test?

ответ

0

Если вы не укажете путь в инструкции require, предполагается, что вы пытаетесь загрузить модуль. Если вы хотите загрузить что-то в свой код, обязательно укажите относительный или абсолютный путь. В вашем случае:

var canvas = require('./test/node_modules/canvas'); 

Другой способ сделать это, чтобы ваши node_modules каталог в корне, а не доступных через Интернет.

project/ 
    mymodule.js 
    node_modules/ 
    canvas/ 
    test/ 
    run.js 

Тогда в ваших run.js или ваших mymodule.js вы можете require('canvas'), как можно было ожидать.

+0

Ваше первое предложение будет работать, но будет работать только для меня, а не для пользователей моего модуля, у которого будет «нормальная» структура модуля. Второе - последнее предложение моего вопроса (которое, если это действительно единственный способ, является тем, что, я полагаю, должен сделать). – Phrogz

+0

http://nodejs.org/api/modules.html#loading_from_node_modules_Folders –

Смежные вопросы