Coffeescript скомпилирован для различий JS браузера Node.js и JS - PullRequest
3 голосов
/ 02 марта 2012

Чего следует избегать, чтобы мой код CoffeeScript работал на Node.js и javascript?Очевидный ответ - «не используйте Node.js», но мне было интересно, есть ли другие мелкие «ошибки», которые могут нарушить перенос кода между ними.

1 Ответ

5 голосов
/ 02 марта 2012

При условии, что вы не полагаетесь на какие-либо API, кроме самого языка (например, вы не используете никаких функций, кроме setTimeout / clearTimeout и setInterval / clearInterval и тех, которые прикреплены к Math)Есть только две вещи, о которых нужно беспокоиться:

  1. Вы можете положиться на новые функции JS, такие как Array::forEach и Array::indexOf, присутствующие в Node, но не в браузере.CoffeeScript помогает вам избежать этих двух ошибок с синтаксисами for x in arr и if x in arr соответственно.

  2. В браузере глобальный объект - window;в Node глобальный объект - global, но вы обычно вместо этого хотите экспортировать вещи.Таким образом, обычное решение, продемонстрированное Underscore.js и другими, состоит в том, чтобы написать root = this в верхней части вашего модуля и прикрепить все к root.В самой внешней области this указывает на window в браузерах и exports в узле.

Я предполагаю, что вы определяете свой модуль в одном скрипте,Если нет, вам следует взглянуть на инструмент типа sstephenson stitch , который позволяет вам написать набор модулей, которые могут require друг в друге в Node, а затем «сшить» их вместе для браузеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...