При условии, что вы не полагаетесь на какие-либо API, кроме самого языка (например, вы не используете никаких функций, кроме setTimeout
/ clearTimeout
и setInterval
/ clearInterval
и тех, которые прикреплены к Math
)Есть только две вещи, о которых нужно беспокоиться:
Вы можете положиться на новые функции JS, такие как Array::forEach
и Array::indexOf
, присутствующие в Node, но не в браузере.CoffeeScript помогает вам избежать этих двух ошибок с синтаксисами for x in arr
и if x in arr
соответственно.
В браузере глобальный объект - window
;в Node глобальный объект - global
, но вы обычно вместо этого хотите экспортировать вещи.Таким образом, обычное решение, продемонстрированное Underscore.js и другими, состоит в том, чтобы написать root = this
в верхней части вашего модуля и прикрепить все к root
.В самой внешней области this
указывает на window
в браузерах и exports
в узле.
Я предполагаю, что вы определяете свой модуль в одном скрипте,Если нет, вам следует взглянуть на инструмент типа sstephenson stitch , который позволяет вам написать набор модулей, которые могут require
друг в друге в Node, а затем «сшить» их вместе для браузеров.