Ember CLI не работает в продакшене

Я развертываю приложение Ember CLI через jenkins и публикую его с помощью nginx. Вот сценарий сборки jenkins:

npm install
bower install
node_modules/ember-cli/bin/ember build --environment=production

Конфигурация nginx просто направляет sub.domain.com на jenkins\jobs\lastStable\archive\dist. Это отлично работает, но когда я перехожу на страницу, она пуста, а в консоли следующий вывод:

TypeError: Ember.Handlebars.compile is not a function   vendor-92ab6507ac60a5bf7c6819aa8fc418d6.js:18
ReferenceError: Swag is not defined   spa-client-9b01c6124f5b2a4cd2e95b62be7f5ba5.js:1

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


person aquavitae    schedule 08.10.2014    source источник
comment
Я столкнулся с подобной проблемой в производстве. В моем случае у меня был компонент с макетом, определенным как макет: Ember.Handlebars.complie('....'). Но затем я удалил часть макета, затем создал отдельный файл hbs для самого компонента, и, по крайней мере, ошибка Ember.Handlebars.compile is not a function исчезла.   -  person Deewendra Shrestha    schedule 08.10.2014


Ответы (3)


В производстве используется среда исполнения handlebars-runtime, которая не включает Ember.Handlebars.compile. Причина в том, что его меньше для использования в продакшене и эффективнее предварительно скомпилировать то, что ember-cli делает за вас автоматически.

Много обсуждений PR можно найти здесь

person jakecraige    schedule 09.10.2014

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

Я использую это решение: https://github.com/rwjblue/_____ember-cli-test/commit/1a26911def6f04a4badee94c8a62d8205258867b

Мой Brocfile.js дифференциал:

-var app = new EmberApp();
+var app = new EmberApp({
+  vendorFiles: {
+    'handlebars.js': {
+      production: 'bower_components/handlebars/handlebars.js'
+    }
+  }
+});
person denis.peplin    schedule 10.10.2014

Я столкнулся с той же проблемой с пакетом bootstrap для ember. Временное решение (от GH) состояло в том, чтобы включить весь файл handlebars.js в производство:

var fileMover   = require('broccoli-file-mover');

var vendorTree = fileMover('vendor', {
    files: {
        'handlebars/handlebars.js': 'handlebars/handlbars.runtime.js'
    }
});

var app = new EmberApp({
    vendorFiles: {
        'handlebars.js': {
            production:  'vendor/handlebars/handlebars.min.js'
    }
   }
});
person kyrre    schedule 10.10.2014