Как требовать модули CommonJS в браузере?

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

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

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

Ответ 1

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

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

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

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

Ответ 3

Как насчет Browserify? Его описание: "Сторона браузера require() для ваших модулей node и пакетов npm", которая звучит так, как вам нужно.

Ответ 4

Компилятор CommonJS https://github.com/dsheiko/cjsc Зачем? Он отлично работает с модулями nodejs (CommonJs) module/treat точно так же, как 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

Ответ 5

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

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

Ответ 6

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

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