Intereting Posts
Как я могу заставить Mocha загрузить файл helper.js, который определяет глобальные перехватчики или утилиты? Ошибка Node.js promisifaction NodeJS для Python pbkdf2_sha256.verify Как получить согласованные поддоны от Geowithin от mongodb? Приложение NodeJS работает с Heroku, но оно показывает ошибку приложения ошибка ионной установки в windowsх 7 Heroku + Node (Parse server) + nginx не работает как установить node.js в качестве службы на частном сервере? Почему приложение node.js получает «зависание», когда я отправляю более 50000 запросов одновременно? полезно ли использовать приложение чата реального времени в java, используя сокеты для мобильных платформ Начиная с noflo, запустив его из nodejs Как включить CORS в веб-приложении MEAN STACK? Очередь работы с резервной копией базы данных Как применить CSS к выходным документам StyleDocco Агрегат: вернуть документ без субдокумента ИЛИ только с последним вложенным документом

Легкий способ прекомпиляции шаблонов Emberjs Handlebar с nodejs?

Мне очень нравится emberjs, и я хотел бы сделать следующий шаг в нескольких моих маленьких мобильных приложениях и предварительно скомпоновать шаблоны Ember / Handlebars как часть моего процесса сборки.

Я бы предпочел держаться подальше от беспорядка с Ruby и хотел бы использовать node.js, так как мне более удобно использовать его.

Я считаю, что я хочу использовать Ember.Handlebars.precompile, но, к сожалению, я не могу загрузить файл canonical ember.js в среде узлов. Пример наивной попытки от узла repl:

> var e = require('./ember'); ReferenceError: window is not defined at /Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:5:1 at Object. (/Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:1596:2) --- stack trace, you get the idea --- 

Я думаю, что я уже понял, как настроить их в своем коде, чтобы они работали корректно с моими представлениями, я просто хочу скомпилировать их в среде вне браузера DOM.

Вместо того, чтобы загружать канонические ember.js в узел, есть ли определенный набор файлов, которые я могу вырвать из реплики ember и использовать для компиляции моих шаблонов?

EDIT Я сделал исправление kluge, которое отлично работает, но получает F для ремонтопригодности. Я схватил весь код Handlebars за вычетом ссылки на объект window . Затем я следил за кодом Ember.Handlebars.Compiler , заменяя Ember.create на Object.create , экспортируя мой объект Ember , и вещи альтов работают как бы великолепно в узле (как в нем работает, так и в создаваемых функциях – это шаблоны). Но я не считаю это ответом на мой собственный вопрос из-за вышеупомянутого keepafail, поэтому все еще открыт для ответов.

РЕДАКТИРОВАТЬ 2 Вышеприведенное оказывается полным сбоем. Возможно, что-то не так в процедуре, но использование Ember.Handlebars.precompile или Ember.Handlebars.compile не работает. Шаблоны создаются, но когда я использую предварительно скомпилированные шаблоны, прикрепленные к Ember.TEMPLATES в моем коде, они не работают. Мне кажется, что я могу заставить шаблоны работать, когда они явно передаются в измененных тегах скриптов, как это предлагается на сайте emberjs.com.

EDIT 3 Я понял, что я делаю неправильно. Мой ответ ниже.

Я написал плагин grunt под названием grunt-ember-handlebars, который делает именно это. Это в значительной степени имитирует сценарий Гарта, с одним важным отличием:

Он использует lib / headless-ember.js и lib / ember.js, которые поддерживаются (по крайней мере на данный момент) ember.js для прекомпиляции шаблонов по умолчанию . Если вы не хотите использовать grunt, вы можете извлечь соответствующий код из помощника precompile_handlebars в task / ember-handlebars.js.

Нашел достаточно хорошее решение для моей проблемы, которое кажется достаточно простым, чтобы утверждать, что я рассмотрю мою проблему.

Вот как я решил вещи:

  • Возьмите минимальный объем кода, который мне нужен, чтобы предварительно скомпоновать шаблоны ember.
  • Краткое описание простой процедуры прекомпиляции:
    • Загрузите код с помощью var Ember = require('./my_ember_precompiler').Ember .
    • Получите ваши шаблоны в виде строк и скомпилируйте их с помощью var templateString = Ember.Handlebars.precompile(str).toString() .
    • Это будет отличаться от приложения к приложению, но для Ember требуется регистрация предварительно скомпилированных шаблонов. После загрузки для каждого созданного шаблона нам необходимо зарегистрировать наши шаблоны. В основном wrap templateString в вызове Handlebars.template() и убедитесь, что эта обернутая функция добавлена ​​в объект Ember.TEMPLATES .

Вышеизложенное безболезненно, когда оно автоматизировано в сценарии.

Я опубликовал версию ember-precompiler с аналогичным интерфейсом к утилите командной строки handlebars. Вы можете установить его из NPM:

 npm install -g ember-precompile 

а затем запустите его как:

 ember-precompile template... [-f OUTPUT_FILE] 

В основном он описывает то, что вы описываете (и то, что делают версии gist): выбивайте недостающие компоненты, необходимые для запуска Ember и Handlebars, скомпилируйте шаблоны и добавьте их в Ember.TEMPLATES .

Взгляните на пакет npm Ember-Runner

Следующий gist содержит сценарий сборки nodejs, который предварительно скомпилирует все файлы .handlebars в данной папке:

https://gist.github.com/1622236

Я написал официальный precompiler модуль npm для всех, кто, возможно, захочет сделать это с недавней версией ember.js

https://npmjs.org/package/ember-template-compiler

Его просто установить и использовать (пример ниже)

npm install ember-template-compiler

 var compiler = require('ember-template-compiler'); var template = fs.readFileSync('foo.handlebars').toString(); var input = compiler.precompile(template).toString(); var output = "Ember.TEMPLATES['foo'] = Ember.Handlebars.template(" + input + ");"; 

Посмотрите на код официального драгоценного камня ember-rails на странице https://github.com/emberjs/ember-rails

Хотя это не проект node.js, он показывает вам, как прекомпилировать шаблоны, используя конвейер активов Rails 3.1+, и включает в себя весь необходимый код Javascript, который вам нужно будет сделать в узле без необходимости взломать решение что вам придется поддерживать самостоятельно.

Более конкретно, посмотрите на vendor / assets / javascripts / ember-precompiler.js и lib / ember-rails / hjs_template.rb

Я далеко от эксперта по узлу (очевидно, Rails – это больше мое дело) .. но я думаю, что эти два файла должны указывать на вас в правильном направлении. В принципе, вам захочется объединить ember-precompiler.js (который действует как «прокладка» из-за отсутствия лучшего слова) с помощью ember.js, а затем вызвать EmberRails.precompile для компиляции ваших шаблонов.

объект windows может быть изделен jsdom

  var jsdom = require("jsdom").jsdom; global.document = jsdom(""); global.window = document.createWindow(); global.$ = global.jQuery = window.$ = window.jQuery = require("jquery"); global.Handlebars = window.Handlebars = require('handlebars'); global.Application = window.Application = {}; require('ember.js'); 

и теперь вы можете запускать что-нибудь из Ember, включая Ember.Handlebars.compile