Как стать автором
Обновить

Комментарии 2

У меня тоже, стандартная библиотека для работы с файлами вызывает каждый раз неприятные ощущения.
Не понял преимуществ в задании пути как свойств объекта. По мне так, вариант


path.join(__dirname, 'node_modules/fstb/package.json')

выглядит лучше и понятнее, чем ваш вариант


FSPath(__dirname)["node_modules"]["fstb"]["package.json"]

К тому же в первом случае IDE может подсказать путь и результат типизирован.


fstb.cwd.node_modules.unlink()

Вызов функции для получения объекта пути, создает дополнительную когнитивную нагрузку и подвержен ошибкам. В примере выше многие, при чтении кода, будут спотыкаться о вызов метода unlink(), так как, ожидается, что происходит удаление.


 asFile().read.lineByLine()
 asFile().write.txt(string_to_write);

Так же, странно видеть атрибуты read и write, лучше либо переименовать на более очевидное, либо сделать их методами. Почему бы сразу не сделать readLineByLine() и writeText()?

Не понял преимуществ в задании пути как свойств объекта

path.join классная штука, всегда ей пользуйтесь при работе путями )). Но вот в чем дело, эта ваша строка кода:
path.join(__dirname, 'node_modules/fstb/package.json')

у нее нет продолжения. Ибо join вернет строку, а вам то надо работать с файлом. И теперь надо эту строку передать каким-то образом в метод из fs.


const package_json_path = path.join(__dirname, 'node_modules/fstb/package.json');
fs.stat(package_json_path, (err, stat) => console.log(stat.size));

//либо (ну так вообще никто никогда не делает, да?):
fs.stat(path.join(__dirname, 'node_modules/fstb/package.json'), (err, stat) => console.log(stat.size))


А вот этот код:
FSPath(__dirname)["node_modules"]["fstb"]["package.json"]

он может быть завершен как инструкция что надо сделать с файлом.
Вот так, например:
FSPath(__dirname)["node_modules"]["fstb"]["package.json"]()
.asFile().stat().then((stat => console.log(stat.size)))

Тут вы прочитаете всю историю куда пойти, что там лежит и что с этим надо сделать. Слева на право, сверху вниз.

Если вам не нравится вариант заменить сегменты на свойства, можно написать вот так:
FSPath(__dirname)["node_modules/fstb/package.json"]


Кстати, подали мне идею, сделаю, чтобы можно было вообще писать вот так:
FSPath(__dirname, "node_modules/fstb/package.json")

Так что спасибо за критику.

Вызов функции для получения объекта пути, создает дополнительную когнитивную нагрузку и подвержен ошибкам. В примере выше многие, при чтении кода, будут спотыкаться о вызов метода unlink(), так как, ожидается, что происходит удаление.


Тут да, есть такое дело, я про этот недостаток писал в конце.

Так же, странно видеть атрибуты read и write, лучше либо переименовать на более очевидное, либо сделать их методами. Почему бы сразу не сделать readLineByLine() и writeText()?


Тут есть ряд причин, почему сделано именно так:
Во-первых, если их сделать методами, то будет путаница, потому что у модуля fs есть методы read и write будет с ними путаница.
Во-вторых хотелось разгрузить подсказку от портянки методов. Когнитивная нагрузка, помните? Если все, что можно делать с файлами в один список положить получится длинная портянка, пусть даже и структурированная по префиксам названий методов как вы предлагаете, так что нет, не вижу смысла делать, так как вы предлагаете. Думал об этом довольно долго, но в итоге решил сделать как есть сейчас.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории