Как требовать модули CommonJS в браузере? - PullRequest
57 голосов
/ 28 сентября 2011

Каков наилучший способ загрузки модулей CommonJS в качестве клиентского javascript в браузере?

Модули CommonJS помещают свои функциональные возможности в пространство имен module.exports и обычно включаются с помощью require(pathToModule) в сервер-боковой скрипт.Загрузка их на клиенте не может работать таким же образом (требуется замена, необходимо учитывать асинхронность и т. Д.)

Я нашел загрузчики модулей и другие решения: Browserify, RequireJS, yabble и т. Д.или способы просто изменить модули.Что вы считаете лучшим способом и почему?

Ответы [ 6 ]

45 голосов
/ 29 сентября 2012

В прошлом я широко использовал requirejs (реализация на BBC iPlayer в 2010 году), и это хорошо работает. Он может работать с модулями CommonJS, но ему нужна дополнительная обертка, что меня раздражает. Если вы хотите использовать эти модули и в node.js, вам нужно использовать requirejs и на стороне сервера, что мне не нравится, поскольку это не idiomatic node.js JavaScript.

В прошлом году я использовал webmake и browserify в нескольких проектах. Первоначально этап компиляции меня оттолкнул, но, широко использовав его в этом году, я могу сказать, что это не проблема.

Browserify включает функцию часов, которая работает очень хорошо. Webmake можно подключить к наблюдателю (например, watchr ) или использовать модуль webmake-middleware , который можно использовать как часть приложения Express или Connect. Это имеет то преимущество, что вместо компиляции JavaScript при каждом сохранении он компилируется только тогда, когда вы действительно запрашиваете его. Connect упрощает создание сервера (также статического), поэтому вы можете создать крошечный статический сервер node.js для обслуживания ваших файлов, если вы хотите разработать свой веб-интерфейс без внутреннего интерфейса.

Бонус: нет необходимости в скрипте сборки, так как вы всегда работаете со встроенным кодом.

17 голосов
/ 06 марта 2012

Вот полный список ваших текущих опций, упорядоченных по их популярности (количеству наблюдателей) на GitHub:

Варианты использования require () в браузере (Архив Wayback Machine)

11 голосов
/ 28 сентября 2011

А как насчет Browserify ?Его описание: «Требуется на стороне браузера () для ваших узловых модулей и пакетов npm», что звучит так, как вам нужно.

2 голосов
/ 27 января 2015

CommonJS Compiler https://github.com/dsheiko/cjsc Зачем? Он отлично работает с модулями nodejs (CommonJs) / обрабатывает модуль точно так же, как nodejs /, и с UMD, вносит минимальный дополнительный код в скомпилированный JavaScript, позволяет экспортировать глобальные переменные сторонних библиотек, не затрагивая их код, исходные карты и хитрость, которую другие не могут сделать :

var str = require( "lorem-ipsum.txt" );
console.log( str );

Выход:

 Lorem ipsum dolor 
 sit amet, consectetur 
 adipiscing elit. Morbi...

Здесь слайды https://speakerdeck.com/dsheiko/modular-javascript-with-commonjs-compiler

0 голосов
/ 26 июля 2012

Webmake является одним из вариантов.Я использую его для упаковки приложений, созданных из более чем 200 модулей из более чем 20 пакетов.Это работает.

Если вы хотите увидеть какой-нибудь пример, проверьте: SoundCloud Playlist Manager , он строго на стороне клиента и построен с Webmake

0 голосов
/ 28 сентября 2011

Не могу сказать, что я пробовал другие, которые вы перечислили здесь, но мне нравится RequireJS, потому что:

  • Работает аналогично CommonJS
  • Это просто в использовании
  • Он реализует некоторые из новых стандартов
  • Вы можете использовать его в NodeJS, чтобы вы могли использовать одни и те же файлы на сервере и клиенте
  • Включает в себя мини-пакер / упаковщик для развертывания в производство
  • У него есть плагины. Текстовый плагин, который позволяет загружать HTML-файлы, очень полезен для больших приложений.
...