nodeJS require.paths решает проблему - PullRequest
9 голосов
/ 22 марта 2011

Я пытаюсь запросить файл относительно и таинственным образом происходит следующее

Это хорошо работает, что указывает на /Users/marcos/Desktop/Taper/lib/utils.js

myPath = "/Users/marcos/Desktop/Taper/lib/./utils";
require(myPath);

Это не так, но должно указывать наточно такой же файл:

require.paths.unshift("/Users/marcos/Desktop/Taper/lib")
require("./utils"); //Doesn't work with './'
require("utils"); //Works Fine

Кто-нибудь знает, почему я все еще не могу использовать ./ в этом случае для загрузки пути, так как

require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")

приводит к:

"/Users/marcos/Desktop/Taper/lib/utils"

в любом случае?

Заранее спасибо

Ответы [ 3 ]

17 голосов
/ 22 марта 2011

ОБНОВЛЕНИЕ:

Из документации :

Модуль с префиксом '/' является абсолютным путем к файлу. За Например, require('/home/marco/foo.js') загрузит файл в /home/marco/foo.js.

Модуль с префиксом './' относится к файлу, вызывающему require(). То есть circle.js должен находиться в том же каталоге, что и foo.js для require('./circle') чтобы найти его.

Без начальных символов '/' или './' для обозначения файла модуль либо "основной модуль" или загружен из папки node_modules.

Если указанный путь не существует, require() выдаст ошибку с его свойство code установлено на 'MODULE_NOT_FOUND'.


Вот оригинальный ответ, который относится к require.paths (который больше не поддерживается):

Из документации :

В узле require.paths - это массив строк, представляющих пути для поиска модулей , если они не имеют префикса '/', './' или '../'.

(выделено мое)

5 голосов
/ 10 ноября 2011

Вы можете передать это, используя NODE_PATH

Пример:

NODE_PATH=`pwd` node app.js
3 голосов
/ 28 марта 2013

Я создал новый модуль узла с именем rekuire .

. Он позволяет вам "требовать" без использования относительных путей.

Это значительно экономит время, когда дело доходит док тестированию / рефакторингу.

https://npmjs.org/package/rekuire

...