Самый быстрый способ ссылки на относительный файл - PullRequest
1 голос
/ 13 февраля 2020

Предположим, что у вас есть относительная ссылка на файл (например, с использованием JS):

const db = require('../../models/index');

В больших проектах сложно найти относительные пути необходимых зависимостей. Существует ли плагин для возвышенного текста или предпочтительный способ ссылки на относительные зависимости без определения пути вручную?

1 Ответ

0 голосов
/ 14 февраля 2020

Так как вы не используете babel, я, вероятно, go с чем-то вроде этого:

const $path = require('path');
const rxTilde = /^~\/?/;
const rxDollar = /^\$(\w+)\/(.*)/;

global.requirex = path => {
  let finalPath = path; // default to entered path
  const rpath = $path.dirname(require.main.filename); // get path of main/root module
  if (rxTilde.test(path)) finalPath = $path.join(rpath, path.replace(rxTilde, '')); // use ~ tilde as "rooted" path
  else if (rxDollar.test(path)) { // use $name for special aliases
    const [, dpath, endPath] = rxDollar.exec(path);
    if (dpath === 'asdf') finalPath = $path.join(rpath, 'my/special/path', endPath);
  }
  // console.log(finalPath);
  return require(finalPath);
};

// run from directory: /home/user/www/test/
const a1 = requirex('~/my/path/to/module');
//>> /home/user/www/test/my/path/to/module
const a2 = requirex('$asdf/other-module');
//>> /home/user/www/test/my/special/path/other-module

Обычные пути, которые не имеют специально обработанных псевдонимов, должны просто "провалиться" в обычный require без изменений.

Также я бы не хотел переопределять встроенный require, поэтому вместо этого я создал глобальный requirex. Теоретически вы могли бы переопределить, но ... yikes.

...