
Safort
06.10.2016
09:25:21
http://www.opennet.ru/opennews/art.shtml?num=45283
Компания RethinkDB сворачивают лавочку. Надеюсь проект кто-нибудь подхватит.

Сергей
06.10.2016
09:25:45
ты файлы по отдельности запускаешь или всегда из главного?

KlonD90
06.10.2016
09:26:01

Safort
06.10.2016
09:26:29
Да я вот тоже уже начал её прикручивать к пет прожекту..

Google

Котяй Негодяй
06.10.2016
09:26:49
Короче, это свойства INIT_CWD, PWD в объекте process.env.

Evgeny
06.10.2016
09:27:43
чото мне кажется что ты не прав

Котяй Негодяй
06.10.2016
09:27:54
Ну, пока их значения не меняются.

Сергей
06.10.2016
09:28:02
а не корень пакета

Котяй Негодяй
06.10.2016
09:28:10
Неа.
Специально перешёл на каталог ниже.

Сергей
06.10.2016
09:28:23
PWD - Print Working Directory

Котяй Негодяй
06.10.2016
09:28:36
Ну... Да. Я так и ожидал.
Только по факту другое поведение увидел.

Сергей
06.10.2016
09:28:55
это не корень)

Котяй Негодяй
06.10.2016
09:29:02
Правда запускал через npm-скрипт.

Google

Сергей
06.10.2016
09:30:02
он ссылается туда
откуда ты запускаешь ноду
запустишь из другого места
будет показывать туда
если ты запускаешь приложение через условный app.js
то тебе это решит проблему
а если ты будешь включать этот пакет в другое приложение
то process.env.PWD будет указывать на приложение, а не на пакет

Котяй Негодяй
06.10.2016
09:31:43
Печаль.
Да, я уже проверил.
Так... INIT_CWD присутсвует только если я запускаю приложение через npm-скрипт.

Alexey
06.10.2016
09:47:40

Котяй Негодяй
06.10.2016
09:47:54
Неа
Не то же.

Alexey
06.10.2016
09:48:59
я правда неочень понимаю что относительно чего ты разолвишь, но обычно для этого хватает методов из модуля path, либо require.resolve

Nikita
06.10.2016
09:49:41
а что такое корень модуля?)

Котяй Негодяй
06.10.2016
09:49:49
Суть в том, что мне нужен надёжный способ найти корень проекта.

Alexey
06.10.2016
09:50:02
process.cwd?
либо можешь привязаться к файлам через __dirname или __filename

Котяй Негодяй
06.10.2016
09:51:06
Работает только если сам проект запускается из нужного места или через npm-script. Если же он подключен как модуль, то не подходит.

Alexey
06.10.2016
09:51:36
т.е. ты внутри модуля хочешь понять где находится корень проекта?

Nikita
06.10.2016
09:51:40
да какой тебе файл надо получить-то?)

Котяй Негодяй
06.10.2016
09:51:46

Alexey
06.10.2016
09:51:52
ну тогда __dirname

Google

Alexey
06.10.2016
09:52:02
относительно него резолви путь до корня
самый надежный способ

Котяй Негодяй
06.10.2016
09:52:33

Alexey
06.10.2016
09:52:51
да. ты же знаешь где на fs у тебя модуль лежит
в чем проблема то?

Котяй Негодяй
06.10.2016
09:53:34
Не знаю. Модуль может быть запущен кем угодно и откуда угодно.

Alexey
06.10.2016
09:53:58
я уже понял, что у тебя какой-то костыль
но есть еще module.parent
выдает инфу о родительском модуле из которого загрузили твой

Котяй Негодяй
06.10.2016
09:54:56
Не подходит.

Alexey
06.10.2016
09:55:35
https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_module_parent
тебе не угодишь :)

Nikita
06.10.2016
09:55:53
ты четко объяснить можешь, чего хочешь?))

Alexey
06.10.2016
09:55:55
в целом, это стандартные способы для определения пути
может ты к задаче неправильно подходишь?

Котяй Негодяй
06.10.2016
09:56:37
Есть файл /unknown/path/to/project/.../.../file.js. Внутри file.js нужно получить /unknown/path/to/project.

Evgeny
06.10.2016
09:56:58
так до проекта или до модуля?

Nikita
06.10.2016
09:57:23
а как этот файл запускают?

Котяй Негодяй
06.10.2016
09:57:27
До npm-пекта == до проекта.

Nikita
06.10.2016
09:57:34
это cli тулза?

Google

Котяй Негодяй
06.10.2016
09:58:10
Файл выполняется как модуль внутри проекта. Сам проект тоже выполняется как модуль в качестве npm-пакета.
Самый простой способ вижу — подниматься по файловому пути и искать package.json;
Пока что.

Alexey
06.10.2016
10:00:05
может тебе наоборот пробросить этот путь внутрь?
сделай в package.json скрипт для надежности, который и будешь запускать

Котяй Негодяй
06.10.2016
10:00:25
Это костыльнее предыдущего варианта. =)
Его никто не будет запускать. Он же npm-пакет.

Admin
ERROR: S client not available

Alexey
06.10.2016
10:01:09
ну как я понял у тебя схема такая, ты непонятно откуда запускаешь зависимость проекта и хочешь внутри зависимости получить путь к проекту

Котяй Негодяй
06.10.2016
10:01:30
Бинго. =)

Alexey
06.10.2016
10:01:47
ну так сделай промежуточный шаг с npm скриптом

Evgeny
06.10.2016
10:02:07
а как вызывается твой модуль?

Котяй Негодяй
06.10.2016
10:02:31
Подключается через require.

Alexey
06.10.2016
10:02:51
ох

Evgeny
06.10.2016
10:03:00
он реквайрится из проекта?

Nikita
06.10.2016
10:03:03
function getProjectPath() {
const idx = __dirname.indexOf('node_modules');
if (idx === -1) {
return __dirname;
}
return __dirname.slice(0, idx);
}

Alexey
06.10.2016
10:03:08
похоже, что нет )

Evgeny
06.10.2016
10:03:14
может тебе через стектрейс ошибки находить откуда тебя вызвали?

Alexey
06.10.2016
10:03:34
да не, тут лучше схему упростить

Котяй Негодяй
06.10.2016
10:03:47

Google

Alexey
06.10.2016
10:04:24
хорошо, а почему тебе module.parent не подошел?
там есть проблема с кэшем, но в целом, если это первое обращение, то путь ты получишь

Nikita
06.10.2016
10:05:03

Котяй Негодяй
06.10.2016
10:05:16

Nikita
06.10.2016
10:05:32
так чем мое решение не подошло?)

Котяй Негодяй
06.10.2016
10:05:38
Там вообще файлов может не быть.
Но равный по костыльности вариант — поиск package.json, тогда уж.

Nikita
06.10.2016
10:08:04
package.json тебе ничего не даст)
ты сам сказал этот модуль могут подключать через другой
в package.json может не быть зависимости
а вообще в таких случаях делают .*rc файл, по которому детектят что нужно

Котяй Негодяй
06.10.2016
10:09:54
http://stackoverflow.com/questions/10265798/determine-project-root-from-a-running-node-js-application
Оказывается, всё очень сложно. =)

Alexey
06.10.2016
10:10:52
круто

Котяй Негодяй
06.10.2016
10:11:15
Короче, я воспользуюсь app-root-path, и не буду трахать мозг.
Он, вроде, не слишком толст.

Семен
06.10.2016
10:53:36
Кто-то с loopback на короткой ноге? Как кастомную валидацию мутите? Попробовал поиграть с Models.validateAsync, а контекст получить не могу, чтобы провалидировать поле, как жить?

Сергей
06.10.2016
10:54:20
перейти на Rails?

Семен
06.10.2016
10:54:47
Одна хуйня