PHP-подобный автозагрузчик с использованием Node.js - PullRequest
0 голосов
/ 28 августа 2018

Я медленно перехожу с PHP на Node.js и пытался найти что-то похожее на composer dumpautoload. Благодаря PSR-4 легко получить доступ к любому классу в любом файле в PHP, если использовать эту команду с простыми операторами use в начале каждого файла.

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

Пример того, что я искал - 2 файла в одной папке:

Некоторые testClass.js (файл класса)

var testClass = {
    sayHello: function () {
        console.log('this is a test');
    }
};

module.exports = testClass ;

Обычно это то, что вы поместили бы в другой файл index.js:

var testClass = require('./testClass');

testClass.sayHello();

Но представьте, что вы можете предварительно проиндексировать все свои классы с помощью какого-либо приложения или команды (например, PHP composer dumpautoload) и просто запустить это:

var testClass = require('testClass');

testClass.sayHello();

Я не смог найти решение, которое бы достигло этого.

Я что-то пропустил?

1 Ответ

0 голосов
/ 03 сентября 2018

Краткий ответ: Нет

Для получения более подробной информации, продолжайте читать:

В настоящее время существуют две основные проблемы require или import:

  1. Относительные пути трудны для чтения и могут привести к путанице при использовании файлов с одинаковыми именами.
  2. Разработчики должны в значительной степени полагаться на IDE для рефакторинга своего кода или определения местоположения файла, когда он находится внутри другого файла.

Хотя PHP, похоже, разработал свой собственный стандарт и находится немного в своей собственной лиге, даже если кто-то разработает эквивалентное решение для достижения того же для Node.js / JavaScript, нам все равно потребуется хорошая поддержка IDE. Чтобы получить хорошую поддержку IDE, этот тип изменений может быть либо:

  1. Нужно быть прозрачным и интегрироваться с тем, как в настоящее время работают IDE.
  2. Будьте изменениями, вызванными самим сообществом (либо require, либо import изменения, которые могут поддерживать абсолютные пути)

Есть несколько ответов здесь (https://gist.github.com/branneman/8048520), и все они, похоже, нарушают поддержку IDE (я тестировал только с WebStorm):

  1. Использование псевдонимов или добавление пути к переменным: прерывает поддержку IDE для автозаполнения и переименования / рефакторинга.
  2. Использование NODE_PATH в качестве корневого пути: отказ от поддержки IDE для автозаполнения и переименования / рефакторинга.
  3. Обтекание require для поддержки /: прекращение поддержки IDE при переименовании / рефакторинге.
  4. Создание нового пользовательского метода: отказ от поддержки IDE для автозаполнения.

В целом, учитывая, что поддержка IDE имеет приоритет над читабельностью кода, похоже, что нет хорошего способа реализовать изменения в текущем управлении зависимостями с помощью Node.js без участия сообщества за такими изменениями.

...