Pull to refresh

Comments 43

UFO just landed and posted this here
На самом деле ситуация будет такая же как и у Go, так же по url грузишь зависимости из кода (без там всяких go mod, dep и т.п.) и используешь из локальной папки. Единственное отличие в том что в Deno они грузятся при первом запуске, а не как в Go, все таки он компилируемый.
А в случае с deno — 5 раз загрузишь в новые проекты нужную тебе библиотеку, а на шестой раз окажется что тот сервер взломали, и ты подгрузил себе криптомайнер.

Хэш-суммы придумали не вчера.

А где в строчке import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; вы видите хеш-сумму?

Нигде. И? Я и продукта-то пока не вижу, однако это не мешает писать статьи и обсуждать. В HTML integrity тоже не с версии 1.0 появилась.

Речь про то, что вообще-то методы повышения доверия к скачиваемому непонятно чему непонятно откуда — вполне существуют.

ЗЫ: Ну и мысль заглавного коммента о том, что NPM «лучше» — она тоже заслуживает осуждения. Не лучше. Всё те же яйца.
Речь про то, что вообще-то методы повышения доверия к скачиваемому непонятно чему непонятно откуда — вполне существуют.
Самый лучший метод повышения доверия к непонятно чему — не скачивать непонятно откуда.
Самый лучший метод повышения доверия к непонятно чему — не скачивать непонятно откуда.

Конечно. Но удобство скачивания настолько велико, что оно так или иначе никуда не денется; исключая случаи, где повышенный уровень недоверия просто необходим по предметной области.
Всё равно, хоть убейте, не понимаю, в чем собственно удобство-то? Размазать зависимости ровным слоем по всему проекту, чтобы было заранее неизвестно, что этой штуке нужно для запуска? Не иметь отдельной управляемой фазы установки? Сломать все инструменты статического анализа, не умеющие ходить по прямым ссылкам?
Deno, как и браузеры, загружает модули по URL
Как я уже писал и в прошлый раз, загрузка исходников по прямым ссылка фактически в рантайме — это умножение на 0 всех потуг в стабильность и безопасность.
Ну и до кучи, подгружать так можно только отдельно лежащий файл в вакууме. Ни зависимостей ни деклараций вы таким образом не получите.
UFO just landed and posted this here

В статье упоминается флаг --importmap, с помощью которого можно настроить маппинг коротких имен модулей на полноценные урлы. В таком случае в исходниках будут такие же как и сейчас import 'lodash';, а обновление версий будет происходить только в файле маппинга.


Более того, import-maps является кандидатом в веб-стандарты и уже имеется некоторый набор инструментов, чтобы генерировать import-maps из yarn.lock or package-lock.json

Это хоть и стандарт, но стандарт костыля для браузера. И он предназначен для импорта файлов, а не пакетов.

Deno декларирует совместимость с браузером в своих design goals, так что ничего удивительного в том, что они используют стандарт написанный для браузера.


В import-map есть возможность указать корневой путь сразу до всех файлов из модуля:


{
  "imports": {
    "lodash/": "/node_modules/lodash-es/"
  }
}

вот вам и импорт пакетов.

Deno декларирует совместимость с браузером в своих design goals,
троллейбус_из_хлеба.jpg. В смысле, а нафига?
В import-map есть возможность указать корневой путь сразу до всех файлов из модуля:
Да, именно файлов. Без собственных зависимостей, метаданных и неявно подгружаемых элементов. Для скомпилированных библиотек в браузере — понятно зачем. Для исходников на сервере — непонятно, а кому от этого будет польза.

То что это не нужно вам, это не значит что это не нужно никому.


Унификация браузерного и серверного кода позволить использовать любые библиотеки в своих проектах, а не только специальные "изоморфные".


Node.js тоже движется в этом направлении, например ввели глобальный класс URL совместимый с браузером, теперь думают над добавлением нативного fetch. Просто у node большой груз обратной совместимости с существующими модулями, поэтому там это не так революционно.

Тут дело-то в том, что в node.js уже есть инструменты, выполняющие все заявленные функции, притом делающие это лучше. Зачем добавлять себе проблем, чтобы потом героически их решать?

Унификация браузерного и серверного кода позволить использовать любые библиотеки в своих проектах, а не только специальные «изоморфные».

1. Подход Deno не расширяет возможности браузера до сервера, а сужает возможности сервера до браузера.
2. У сервера и браузера разный рантайм, большинство кода в принципе не сможет работать и там и там.
3. «Унификация» приведёт к несовместимости проектов Deno с node.js, что тоже мало кому надо.
У сервера и браузера разный рантайм, большинство кода в принципе не сможет работать и там и там.

У меня почему-то выходит наоборот. Львиная доля кода — абстрагирована от рантайма.

… и, опять-таки, никакой deno вам для этого, скорее всего, не понадобился.

Ну, в общем-то да. Хотя, мне интересно, чем это кончится.
UFO just landed and posted this here

Мне вообще идея не понятна. Я бы хотел предложить чтобы оно работало вообще в песочнице, но докер уже изобрели. А про разрешение записи в файл — это бред. Если кому-то будет нужно, он просто сделает process.exec('echo somthingBad > /usr/var/...').

«Разрешить приложению запуск внешнего процесса? — Да / Нет»
Помимо флага --allow-write, влияющего на работу с файловой системой, при запуске скриптов можно использовать и другие флаги. Это — --allow-net, --allow-env и --allow-run

Если существует --allow-run то какой смысл в остальных флагах? Или я чего-то не понимаю? Если кто-то нехороший захочет дел натворить, разве --allow-run не будет достаточно?
UFO just landed and posted this here

Это же, разрешительный флаг, а не запретительный, в смысле детализация других "мелких" разрешений вполне законна. Не надо же сразу всем 0777 делать.

Моя претензия, что deno не трушная песочница. --allow-run по факту заменяет все флаги.
То есть достаточно создать злой пакет, который якобы служит для запуска какого-то процесса с определенными параметрами (в npm таких неимоверное множество), но под капотом он сможет делать вообще все что угодно, и это будет не отследить.
Если позиционировать себя как песочницу, то стоит идти в направлении докера, sandboxie и т. д. а не просто ограничить вызовы стандартной библиотеки.
В Go собрали кучу проблем связанных с «удобным импортом прмяо из гитхаба», и в итоге пришли к модулям…
UFO just landed and posted this here

Интресно было бы узнать о скорости работы нового решения, но всех только за импорты борются.

UFO just landed and posted this here
UFO just landed and posted this here

За счёт Хайпа (простите не удержался)

UFO just landed and posted this here

Это вполне могло бы сойти за тонкую первоапрельскую шутку.

Немного не понял. Если есть возможность импорта модулей «из сети» — а в модулях как в node есть возможность подключения native кода — что мешает подключить модуль, который будет реализовывать любой функционал в обход песочницы?
import myFS from 'mysite.net/myFS'

console.log(myFS.readFromFile('anyfile'))


Доступ к файловой системе, доступ к сети и тп. Механизма контроля подключенных модулей я не увидел.

Вообще, изоляция на уровне контейнера типа докера выглядит более надежной
Качать зависимости по ссылкам и при этом оборачивать серверный код в песочницу — это какой-то новый уровень беспомощности и современных разработчиков. Открытое признание: «Я не понимаю что как работает на моём же сервере, мне лень разбираться с настройкой репозитриев, я просто хочу копировать код со StackOverfrlow и чтоб всё работало».

Ну что вы к менеджеру пакетов прицепились, он тут не важный...


Если новый http не будет лучше сделан, чем у ноды, то этот движок не кому не нужен будет.
В текущей ноде проблема в медленном парсере, парсит все, даже когда это вам не нужно. Дино наступает на те же грабли.


Кстати след релиз ноды будет через 3 месяца. В этом должны выпустить tls для 12, по крайней мере было обсуждение.

Поправочка: в Node 12 уже новый парсер. Актуальная версия Ноды 12.6.0

Все же не достаточно быстрый если сравнивать с uws

UFO just landed and posted this here
Не хотелось бы еще вторую ноду, которая такая же, но не совсем она и что бы один нужный мне пакет был уникален для одной системы, а второй для другой.
Я понимаю ещё, если бы она была быстра как пуля и надежна как сундук с баксами, но судя по всему это совсем не так.
Sign up to leave a comment.