Хотя существуют отличные решения для управления зависимостями на стороне сервера, я не смог найти ни одного, которое удовлетворяло бы все мои потребности в согласованном рабочем процессе управления зависимостями JavaScript на стороне клиента. Я хочу удовлетворить эти 5 требований:
- Управлять зависимостями на стороне клиента в формате, похожем на пакет npm package.json или bower. «с
bower.json
- Он должен иметь возможность указывать на репозиторий git или на фактические js-файлы (в Интернете или локально) в моем
dependency.json
файле для менее известных библиотек (npm позволяет вам указывать на репозитории git) - Он должен минимизировать и объединить все библиотеки в один файл, например ender - это единственный файл js, который мне нужно было бы поместить в свой
<script>
тег на стороне клиента. - Он должен иметь встроенную поддержку CoffeeScript, например BoxJS 4 (теперь мертв)
В браузере я смогу использовать любой стиль require :
var $ = require('jquery'); var _ = require('underscore');
Или еще лучше, сделайте стиль headjs :
head.js(['jquery', 'underscore', 'mylib'], function($, _, mylib) { // executed when all libraries are loaded });
Если такого единого инструмента не существует, какая комбинация инструментов лучше всего, то есть цепочка инструментов, которую я могу комбинировать, используя что-то вроде volo (или grunt )?
Я уже исследовал все инструменты, с которыми я связался здесь, и они удовлетворяют только до трех моих требований в лучшем случае индивидуально. Поэтому, пожалуйста, не публикуйте больше об этих инструментах. Я бы согласился только с ответом, который предоставляет один инструмент, который удовлетворяет всем 5 моим требованиям, или если кто-то опубликует конкретный рабочий процесс / сценарий / рабочий пример цепочки инструментов из нескольких таких инструментов, который также удовлетворяет всем моим требованиям. Спасибо.
require
синтаксиса в браузере рассмотреть browserifyОтветы:
require.js делает все, что вам нужно.
Мой ответ на этот вопрос может вам помочь
Пример:
Иерархия проекта клиентского приложения:
main.js - это то место, где вы инициализируете свое клиентское приложение и настраиваете require.js:
Зависимости будут использовать cs подключаемый модуль если стоять «cs!». Плагин cs компилирует файл coffeescript.
Когда вы идете в прод, вы можете предварительно собрать весь свой проект с r.js .
Вот ваши требования:
Управляйте зависимостями на стороне клиента в формате, аналогичном package.json в npm или component.json в bower. По-другому, но КАК ХОРОШО!
У меня должна быть возможность указать в моем файле dependency.json для менее известных библиотек git repo или фактические файлы js (либо в Интернете, либо локально) (npm позволяет указать репозитории git). ДА
Он должен минимизировать и объединить все библиотеки в один файл, например ender - это единственный файл js, который мне нужно было бы поместить в свой тег сценария на стороне клиента. ДА с r.js.
Он должен иметь встроенную поддержку coffeescript, например Box. ДА
В браузере я могу использовать требуемый стиль или headjs. ДА
источник
r.js
, могу ли я просто загрузить неминифицированные версии всех библиотек или как мне выбрать между минифицированными и неминифицированными библиотеками?http://requirejs.org/ - это тот, который вы ищете, я считаю
источник
Как @ Guillaume86, я думаю, он поможет вам максимально приблизиться к тому месту, где вы хотите быть.
В hem зависимости управляются с помощью комбинации npm и hem. Используйте npm, чтобы явно установить все внешние зависимости ваших проектов. Используйте hem, чтобы указать, какие зависимости (как внешние, так и локальные) должны быть сшиты вместе для операций на стороне клиента.
Я создал скелет этого проекта, чтобы вы могли увидеть, как это будет работать - вы можете увидеть его на https://github.com/dsummersl/clientsidehem
Добавление зависимостей
Используйте npm для поиска конкретной зависимости, а затем измените файл package.json, чтобы гарантировать отслеживание зависимости в будущем. Затем укажите зависимость для вашего приложения в slug.json.
Например, предположим, что вы хотите добавить зависимость от сценария кофе. Просто используйте npm, чтобы установить зависимость и сохранить ее в файле package.json:
Предположим, вы хотите включить свой собственный модуль bloomfilters, а его нет в реестре npm. Вы можете добавить его в свой проект следующим образом:
Локальные модули
Если вы хотите добавить свой собственный кофе или javascript, вы можете сделать это, добавив эти файлы в папку app /. Обратите внимание, что для того, чтобы раскрыть ваш скрипт с помощью метода require, вы должны сделать его модулем CommonJS. Это очень просто - смотрите подол документацию .
Локальные файлы
Если вы хотите включить код, отличный от CommonJS, который не является «обязательным», вы также можете сшить его, указав свой собственный javascript или coffeescript через список «libs» в slug.json.
CSS
Подол тоже сшивает ваш CSS, если хотите. См. Документацию по подолу .
Здание
Когда у вас есть список зависимостей, вы можете использовать кромку, чтобы сшить их все вместе.
Ноты
Hem предназначался для проекта spinejs, но вам не обязательно использовать его для этого. Если хотите, игнорируйте любые документы, в которых упоминается позвоночник ...
источник
Что ж, я удивлен, что еще никто не упомянул Browserify .
источник
napa
или нет? npmjs.org/package/napaЯ почти уверен, что Hem соответствует вашим требованиям (я использую личную вилку с дополнительными компиляторами - нефритом и стилусом - его легко настроить под ваши нужды). Он использует npm для управления зависимостями.
источник
Возможно, вы захотите взглянуть на Yeoman , который использует несколько методов, чтобы помочь вам с вашими требованиями.
Встроенная поддержка CoffeeScript, Compass и других. Работает с r.js ( RequireJS ), модульным тестированием и т. Д.
Что касается ваших требований:
Все возможности:
источник
Bower может удовлетворить ваши потребности (1) и (2), в остальном у вас есть requirejs. Из ридми:
Чтобы установить пакет:
источник
Посмотрите на диспетчер пакетов Jam . Ниже приводится описание с его домашней страницы.
Это похоже на npm по принципу работы.
Установите пакет, как показано ниже
обновление пакетов путем выполнения
Оптимизировать пакеты для производства
Зависимости Jam можно добавить в
package.json
файл.Полную документацию см. В документации по Jam.
источник
Я только что наткнулся на inject.js
Некоторые из функций с сайта проекта :
источник
Есть несколько вариантов:
Компонент также может представлять интерес, он не управляет зависимостями как таковой, но позволяет вам использовать нарезанные версии больших библиотек.
источник
Я использую hem с npm, и я хотел добавить некоторые дополнительные преимущества, которые, как мне кажется, пока не рассматривались.
hem build
если не публикую приложение.cake
описанный выше метод, вы можете просто напрямую ссылаться на coffeescript из зависимых проектов.eco
(встроенный Coffeescript) для представлений и Stylus для CSS и компилирует все это вместе с вашим Coffeescript в один файл JS и один файл CSS.Вот базовый список для настройки с приложением Spine, hem, coffeescript. Не стесняйтесь игнорировать части позвоночника. Фактически, иногда я использую,
spine app
чтобы настроить структуру каталогов для приложения, отличного от Spine, а затем редактировать,slug.json
чтобы перейти к другой структуре компиляции.curl http://npmjs.org/install.sh | sh
в системе * nix. Я предполагаю, что это доступно из командной строки.npm install -g hem
). В последнее время разработка расширилась, поэтому вы можете захотеть получить ее прямо из github ( https://github.com/spine/hem ), проверить ветку иnpm install -g .
в этой папке.npm install -g spine.app
сделает позвоночник доступным как глобальную командуspine app folder
сделает Spine проект под названиемapp
вfolder
, генерирующий правильную структуру каталогов и кучу скелетов файлов , чтобы начать.cd
в папку и отредактируйтеdependencies.json
нужные библиотеки. Добавьте их, чтобыslug.json
Подол тоже знал, где их найти.npm link
любой из ваших локальных пакетов в разработкеnode_modules
, и вы можете добавить ихslug.json
для hem (либоindex.js
для включения напрямую, либо,index.coffee
если вы хотите, чтобы он скомпилировал его).npm install .
чтобы загрузить все зависимости, которые вы только что ввели.Если вы посмотрите на позвоночник по умолчанию конфигурации с, есть
app/lib/setup.coffee
гдеrequire
все библиотеки , которые вам нужно от зависимостей. Примеры:В
index.coffee
, вы простоrequire lib/setup
и загрузить главный контроллер для вашего приложения. Кроме того, вам нужныrequire
любые другие классы в этих других контроллерах. Вы можете использоватьspine controller something
илиspine model something
для создания шаблонов для контроллеров и моделей. Типичный контроллер Spine с использованием узлов выглядит следующим образомrequire
:Сгенерированный по умолчанию
index.html
обычно подходит для загрузки вашего приложения, но при необходимости измените его. В соответствии с вашими требованиями он извлекает только одинjs
и одинcss
файл, который вам никогда не нужно изменять.css
папке. Это намного гибче, чем CSS :)folder
, запустите,hem server
чтобы запустить сервер Hem, и перейдите к,localhost:9294
чтобы увидеть свое приложение. (Если вы установили его глобально.) У него есть некоторые скрытые аргументы, например,--host 0.0.0.0
прослушивает все порты.Еще одна вещь: обычно
hem server
обновляется автоматически по мере обновления кода и сохранения файлов, что упрощает отладку. При запускеhem build
ваше приложение будет скомпилировано в два файлаapplication.js
, которые минифицированы иapplication.css
. Если вы запуститеhem server
после этого, он будет использовать эти файлы и больше не будет обновляться автоматически. Так что неhem build
пока вам действительно не понадобится уменьшенная версия вашего приложения для развертывания.Дополнительные ссылки: Spine.js & hem начало работы
источник
Вот решение, использующее совершенно другой подход: упаковать все модули в объект JSON и потребовать модули путем чтения и выполнения содержимого файла без дополнительных запросов.
Чистая демонстрационная реализация на стороне клиента: http://strd6.github.io/editor/
https://github.com/STRd6/require/blob/master/main.coffee.md
STRd6 / require зависит от наличия пакета JSON во время выполнения.
require
Функция генерируется для этого пакета. Пакет содержит все файлы, которые могут потребоваться вашему приложению. Никаких дальнейших HTTP-запросов не производится, потому что пакет связывает все зависимости. Это максимально приближено к стилю Node.js, который требуется для клиента.Состав пакета следующий:
В отличие от Node, пакет не знает своего внешнего имени. Это зависит от pacakge, включая зависимость, чтобы назвать его. Это обеспечивает полную инкапсуляцию.
Учитывая все эти настройки, вот функция, которая загружает файл из пакета:
Этот внешний контекст предоставляет некоторую переменную, к которой имеют доступ модули.
require
Функция подвергается модулей , таким образом они могут потребоваться другие модули.Также отображаются дополнительные свойства, такие как ссылка на глобальный объект и некоторые метаданные.
Наконец, мы выполняем программу в модуле и в заданном контексте.
Этот ответ будет наиболее полезен для тех, кто хочет иметь синхронную инструкцию require стиля node.js в браузере и не интересуется решениями для удаленной загрузки скриптов.
источник
Проверьте cartero, если вы используете node / express на бэкэнде.
источник
Я бы посоветовал проверить набор инструментов додзё, который, кажется, отвечает большинству ваших требований. Я не уверен, что это CoffeeScript.
dojo работает с модулями, написанными в формате определения асинхронного модуля (AMD). Он имеет систему сборки с пакетами, и вы можете объединить их в один или несколько файлов (называемых слоями). По-видимому, он принимает репозитории типа git, подробнее о системе сборки здесь:
http://dojotoolkit.org/documentation/tutorials/1.8/build/
Для справки, в следующем месяце ожидается бета-версия v1.9.
источник
Другой фреймворк, который удовлетворяет всем моим критериям, выпущенный недавно: http://duojs.org/ (а также поддерживает обработку других ресурсов, таких как CSS, как зависимостей).
источник
инъекция зависимостей с асинхронной загрузкой + браузер будет еще одним хорошим выбором по сравнению с requirejs
асинхронный-интерфейс-зависимости-управление-без-AMD
источник