Изменить расположение node_modules

Есть ли способ изменить расположение папки node_modules?

Например:

- dir1
- dir2
- node_modules

в

- dir1
- dir2
    - node_modules

Ответ 1

Ниже приведен код, который по умолчанию выглядит в папке 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;
};

Итак, вот точный шаблон поиска:

  • Node.JS смотрит, является ли данный модуль основным модулем. (например, http, fs и т.д.). Всегда занимает приоритет при загрузке модули.

  • Если данный модуль не является основным модулем (например, http, fs и т.д.), Node.js начнет поиск каталога с именем node_modules.

    Он запустится в текущем каталоге (относительно текущего исполняемого файла в Node.JS), а затем запустится вверх по иерархии папок, проверив каждый уровень для папки node_modules. Как только Node.JS найдет папку node_modules, он затем попытается загрузить данный модуль либо как файл (.js) JavaScript, либо как именованный подтекст -directory; если он найдет именованный подкаталог, он попытается загрузить файл по-разному. Итак, например

  • Если вы сделаете запрос на загрузку модуля, "utils" и его каталог не файл .js, то: Node.JS будет искать иерархический каталог для node_modules и utils следующими способами:

    ./node_modules/utils.js
    ./node_modules/utils/index.js
    ./node_modules/utils/package.json
    
  • Если Node.JS по-прежнему не удается найти файл в вышеуказанных шагах, Node.js начнет искать в каталоге пути от переменных окружения, т.е. NODE_PATH, установленных на вашем компьютере (очевидно, установленным файлом установщика Node.JS, если вы находитесь в окнах) Не найден во всех вышеперечисленных шагах, затем трассирует трассировку стека stder
    Error: Cannot find module 'yourfile'
    Для получения дополнительной информации: ссылка здесь даже циклический require() объясняется очень хорошо..

Ответ 2

Фактически, мы можем даже отредактировать файл nodevars.bat, в котором находится последняя строка:

if "%CD%\"=="%~dp0" cd /d "%HOMEDRIVE%%HOMEPATH%"

Мы можем указать наш собственный каталог, а не искать домашний каталог пользователя:

%HOMEDRIVE%%HOMEPATH%

чтобы node -modules-location автоматически выполнялся.