deno vs ts-node: какая разница - PullRequest
       15

deno vs ts-node: какая разница

0 голосов
/ 22 ноября 2018

Я работаю над относительно большим проектом машинописного текста, я использую ts-node для запуска тестирования узлов и примеров.Насколько я понимаю, ts-node скомпилирует ts файлы в js файлы и выполнит.

Недавно я слышал о deno, который является средой выполнения машинописи.Я попробовал несколько примеров в машинописи, которая работает с использованием ts-nodeЯ запустил пример с deno, в консоли было напечатано много сообщений о компиляции, затем я выполнил код.А позже я обнаружил, что в /username/.deno есть файлы кэша.Я не чувствую, что deno выполняется быстрее, чем ts-node

Кажется, что и deno, и ts-node будут компилироваться и запускаться с использованием кэша.В чем разница между ними?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

TL; DR

Deno больше похож на Node, чем на ts-node, т.е. это среда выполнения JS, основанная на V8.В отличие от Node, Deno содержит компилятор TypeScript.Deno не является частью экосистемы Node / npm.

С другой стороны, ts-узел - это модуль Node.js, который использует компилятор TypeScript для переноса кода TypeScript и запуска его в Node.ts-node является частью экосистемы Node / npm.

Deno работает быстро.См. Ниже.

Сходства Deno и ts-узла

  • Они оба выполняют код TypeScript
  • Они оба работают в Linux, Mac и Windows (но также и ts-nodeв SmartOS и AIX)
  • Они оба используют движок Google V8 JavaScript (ts-узел через узел, который он использует под капотом)

Различия между Deno и ts-узлом

ts-node

  • ts-node - это модуль Node.js
  • , написан на Node.js
  • , устанавливается с npm
  • он использует компилятор TypeScript в качестве одноранговой зависимости
  • он устанавливает свои собственные зависимости
  • в качестве среды выполнения, он использует Node, который написан на C ++ с использованием libuv

Deno

  • deno - автономный исполняемый файл
  • он не использует Node.js
  • он распространяется как один двоичный файл
  • itсодержит компилятор TypeScript в виде снимка V8
  • он не имеет зависимостей
  • это среда выполнения, написанная на Rust с использованием Tokio

Maturity

ts-node

ts-node использует среду выполнения Node.js, поэтому было бы справедливо включить ее здесь:

  • Node.js былвыпущенная в 2009 году, последняя версия LTS 10.15.3
  • npm была выпущена в 2010 году, версия, включенная в Node LTS: 6.4.1
  • ts-node была выпущена в 2015 году, последняя версия8.0.3

Deno

Deno сам по себе является средой выполнения, поэтому он не использует ничего другого:

  • Deno был выпущен в 2018 году,последняя версия - 0.3.6

Популярность

GitHub:

Переполнение стека:

Libraries

ts-node

Вы можете использовать все библиотеки Node, доступные на npm

(в настоящее время на npm есть 955 263 пакета, не все для Node, но все еще много)

Библиотеки Node, доступные на npm, даже если они изначально были написаны на TypeScript, обычно публикуются в форме, переносимой в JavaScript, с дополнительными определениями типов в *.d.ts файлах (включаются в пакет npm или устанавливаются отдельно).из пространства имен @types).

Deno

На https://deno.land/x/ имеется 55 сторонних модулей и на https://github.com/denolib/awesome-deno#modules 56 библиотек и инструментов (я не делалне проверяйте, все ли они одинаковы)

Библиотеки Deno - это просто файлы TypeScript.

Разница в установке

ts-node

  • youустановить Node.js
  • вы устанавливаете typescript и ts-node с их зависимостями с npm
    • npm install typescript ts-node
    • устанавливает модули по 10 npm и помещает 44MB в 212 файлах в node_modules

Deno

  • , которые вы загружаетеодин двоичный файл

Ваши различия в коде

ts-node

  • ваш код работает так же, как если бы он был передан с tsc и запущен с node (потому что он находится под капотом)
  • вы можете использовать Node API
  • вы можете использовать все встроенные модули Node
  • вы можете использовать модули из npm
  • вы можете import файлы, используя относительные пути (обычно без суффикса .ts)
  • вы можете import зависимости, установленные с npm (или yarn) в node_modules

Deno

  • ваш код не работаеттак же, как в Node (потому что он не запускается с Node)
  • вы используете Deno API
  • вы можете использовать встроенные модули Deno
  • вы можете использоватьдругие доступные модули Deno
  • вы можете import файлы, используя относительные пути (всегда с .ts суффиксом!)
  • вы можете import URL-адреса напрямую из Интернета (не нужноnpm install)

Примеры

Вот пример публикации минимальной библиотеки, написанной на TypeScript, и ее использования.

Создание и использование библиотеки TypeScript с Nodeи ts-node

Это то, что я делаю сейчас с примером проекта:

https://github.com/rsp/node-ts-hello

Создание библиотекиary:

  1. найти свободное имя на npm (этого недостаточно, см. ниже)
  2. создать репо на GitHub
  3. создать package.json с помощью npm init
  4. установить компилятор TypeScript с npm install typescript
  5. решить, сохраняете ли вы package-lock.json в репо (есть плюсы и минусы)
  6. создать srcdir, где вы будете хранить файлы TypeScript
  7. добавьте hello.ts в src
  8. добавьте tsconfig.json файл и убедитесь, что:
    • добавьте "src/**/*" к "include"
    • добавить зависимости и ваши собственные типы в "paths"
    • добавить "outDir": "dist", чтобы поместить файлы JS в известное место
    • добавить каталог dist в .gitignore, чтобы скомпилированные файлы не были в git
    • , добавьте то же, что и в .gitignore, но без dist в .npmignore
      (иначе вы не будете публиковатьнаиболее важные файлы, см. ниже)
    • добавить "declaration": true, чтобы вы получили *.d.ts файлов, сгенерированных
  9. добавить "main": "dist/hello.js" в package.json (обратите внимание на "js"«суффикс»
  10. добавить "types": "dist/hello.d.ts" в package.json (примечаниесуффикс "ts")
  11. добавьте "build": "tsc" к package.json (обратите внимание на избыточные файлы, см. ниже)
  12. войдите с npm login (вы не должны входить во всевремя - см .: Now Pushing Malware: логины dev для пакета NPM подделаны взломанным инструментом, популярным среди кодеров )
  13. скомпилируйте проект с помощью npm run build
  14. опубликуйте пакет сnpm publish
    • когда вы получаете npm ERR! publish Failed PUT 401, вам необходимо войти в систему с npm login
    • , когда вы получите npm ERR! publish Failed PUT 403 ваш пакет может быть "слишком похож на существующие пакеты" - попробуйте переименовать егов package.json, переименуйте репозиторий и обновите все как readme, выдает itp.в package.json
  15. выйдите из npm с помощью npm logout
  16. посмотрите ваш ~/.npmrc и убедитесь, что у вас ничего подобного не осталось:
    • //registry.npmjs.org/:_authToken=...

Использование библиотеки в другом проекте с использованием ts-node

  1. создать новый каталог
  2. создать package.json файл с npm init
    • (так что вы можете установить зависимости локально для вашей новой программы)
  3. установить нашу библиотеку с npm install node-ts-hello
  4. при желании установить ts-узел с npm install typescript ts-node
    • (если он не установлен глобально)
  5. добавить hi.ts файл, который импортирует нашу библиотеку с:
    • import { hello } from 'node-ts-hello';
    • hello('TS');
  6. запустить его с npx ts-node hi.ts (если ts-узел был установлен локально) или ts-node hi.ts (если ts-узел былустановлен глобально)
    • если вы получаете ошибки, см. ниже

Потенциальные проблемы: я немного упростил вышеприведенное, мой фактический процесс создания этой библиотекиописано здесь .

Создание и использование библиотеки TypeScript с помощью Deno

Вот что я сейчас делаю с примером проекта:

https://github.com/rsp/deno-hello

Создание библиотеки:

  1. создание репо на GitHub
  2. размещение hello.ts в репо

Использование библиотеки:

  1. Создать файл hi.ts с содержанием:
  2. Запустите вашу программу с помощью deno run hi.ts

При первом запуске будет напечатано:

$ deno run hi.ts 
Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts
Downloading https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts
Compiling https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts
Hello, TS!

Второй запуск:

$ deno run hi.ts 
Hello, TS!

Если вы измените hi.ts, он будет перекомпилирован, но зависимости не будут загружены снова:

$ deno run hi.ts 
Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts
Hello, TS!

(Обратите внимание, что touch hi.ts будет недостаточно, вам нужно внести реальные изменения, потому что Дено проверяет контрольную сумму файла, а не метку времени.)

Скорость

ts-node

Скорость запуска версии ts-узла нашего hi.ts из приведенных выше примеров:

$ time npx ts-node hi.ts 
Hello, TS!

real    0m0.904s
user    0m1.300s
sys     0m0.083s

Это после того, как зависимости уже установлены и после запуска несколько раз, чтобы убедиться, что все кэшированиеработает.Почти одну секунду.

Deno

Скорость запуска версии Deno нашей hi.ts из приведенных выше примеров:

$ time deno run hi.ts 
Hello, TS!

real    0m0.028s
user    0m0.010s
sys     0m0.015s

Это также после того, как зависимостиуже установлен и после запуска несколько раз, чтобы убедиться, что все кэширование работает.

Более 32-кратное улучшение скорости.

Резюме

Deno следует сравнивать больше с Node, чемс ts-node, потому что Deno - совершенно новая среда выполнения, а ts-node - модуль для Node, поэтому ваша программа, запущенная с ts-node, действительно использует среду выполнения Node.

Это очень молодой проект, но он уже получилмного тяги.У него не так много документации или библиотек, как у Node, но это означает, что это может быть наилучшее время для участия, потому что когда оно станет более популярным, и я думаю, что по многим причинам, которые выходят за рамки этого ответа, людикто уже имеет опыт работы с ним, будет нужен на рынке, как это было с Node.

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

Скорость разработкииспользование отдельных файлов без необходимости конфигурирования, таких как package.json или node_modules, а также возможность импорта зависимостей непосредственно из URL-адресов (например, во внешнем интерфейсе) позволит работать по-разному как для кода конечного пользователя, так и длябиблиотеки.Посмотрим, как все это работает на практике, но уже выглядит многообещающе.

0 голосов
/ 05 декабря 2018

ts-node основан на Node, в то время как Deno - это совершенно новая и новая среда выполнения на стороне сервера, с изменениями в дизайне API, модульных систем, модели безопасности и т. Д. (Что лучше отражает разработки после ES6).Кроме того, компилятор TypeScript живет непосредственно внутри одного исполняемого файла Deno (через снимки V8) и, следовательно, должен иметь более короткое время запуска.

...