2 ответов:
ниже приведен код, который выглядит int
node_modulesпапка по умолчаниюModule.prototype.load = function(filename) { debug('load ' + JSON.stringify(filename) + ' for module ' + JSON.stringify(this.id)); assert(!this.loaded); this.filename = filename; this.paths = Module._nodeModulePaths(path.dirname(filename)); var extension = path.extname(filename) || '.js'; if (!Module._extensions[extension]) extension = '.js'; Module._extensions[extension](this, filename); this.loaded = true; };Итак, ниже приведен точный шаблон поиска:
узел.JS смотрит, является ли данный модуль основным модулем. (например,
http,fsи т. д.) Всегда имеет приоритет в загрузке модули., если данный модуль не является основным модулям(например,
http,fsи т. д.), Узел.затем в JS начнет найдите каталог с именем,node_modules.он запустится в текущем каталоге (относительно текущего исполняемого файла в узел.JS), а затем работать свой путь вверх по иерархии папок, проверяя каждый уровень для папки папки node_modules. Один раз узел.JS находит
node_modulesпапка, затем он попытается загрузить данный модуль либо как (.файл JS) JavaScript или в качестве имени подкаталога; если он находит по имени Директории, затем попробуйте загрузить файл различными способами. Так, например,если вы делаете запрос на загрузку модуля, "utils" и его каталог не a .JS файл тут:
узел.JS будет искать иерархический каталог дляnode_modulesиutilsследующим образом:./node_modules/utils.js ./node_modules/utils/index.js ./node_modules/utils/package.jsonесли узел.JS по-прежнему не удается найти файл в вышеуказанных шагах, узел.затем js начнет просматривать пути к каталогам из переменные среды, т. е.
NODE_PATHустановить на вашей машине (очевидно, задано узлом.Файл установщика JS, если вы находитесь в windows) Не найдено во всех вышеперечисленных шагах, затем печатает трассировку стека в stder
например.:Error:Cannot find module 'yourfile'
для получения дополнительной информации: ссылка здесь даже циклический require () очень хорошо объяснил..
на самом деле, мы даже можем редактировать , в котором последняя строка:
if "%CD%\"=="%~dp0" cd /d "%HOMEDRIVE%%HOMEPATH%"мы можем указать наш собственный каталог вместо того, чтобы заботиться о домашнем каталоге пользователя:
%HOMEDRIVE%%HOMEPATH%Так что узел-модули-расположение будет автоматически заботиться.
Comments