И браузер, и Node.js используют JavaScript в качестве языка программирования. Но разработка приложений для браузера полностью отличается от разработки приложения на Node.js. Несмотря на то что язык всегда один и тот же — JavaScript, — есть ключевые различия, которые делают опыт кардинально разным.
С точки зрения фронтенд-разработчика, который активно пользуется JavaScript, приложения на Node.js несут огромное преимущество: комфорт от того, что всё — и фронтенд, и бэкенд — программируется на одном языке.
Это большая возможность, ведь мы знаем, как трудно по-настоящему, глубоко выучить язык программирования, — и, используя один и тот же язык для всей работы в вебе (и на клиенте, и на сервере), вы оказываетесь в уникально выигрышном положении.
Меняется экосистема.
В браузере вы почти всё время взаимодействуете с DOM или другими API веб-платформы, например с Cookies. В Node.js всего этого, разумеется, нет. У вас нет document, window и всех прочих объектов, которые предоставляет браузер.
А в браузере, в свою очередь, нет всех тех удобных API, которые Node.js предоставляет через свои модули, — например, доступа к файловой системе.
Ещё одно большое отличие: в Node.js вы контролируете окружение. Если только вы не разрабатываете приложение с открытым исходным кодом, которое кто угодно может развернуть где угодно, вы знаете, на какой версии Node.js будет работать ваше приложение. По сравнению с браузерным окружением, где вам не выпадает роскоши выбирать, каким браузером пользуются посетители, это очень удобно.
Это значит, что вы можете писать весь современный JavaScript уровня ES2015+, который поддерживает ваша версия Node.js. Поскольку JavaScript развивается очень быстро, а браузеры обновляются медленнее, в вебе иногда приходится довольствоваться более старыми версиями JavaScript / ECMAScript. Чтобы преобразовать код в совместимый с ES5 перед отправкой в браузер, можно использовать Babel — но в Node.js это не понадобится.
Ещё одно различие: Node.js поддерживает обе модульные системы — CommonJS и ES-модули (начиная с Node.js v12), тогда как в браузере стандарт ES-модулей только начинает внедряться.
На практике это значит, что в Node.js можно использовать и require(), и import, тогда как в браузере вы ограничены только import.