2015-12-18 3 views
1

У меня есть пользовательский процесс сборки для сайта Polymer (Polybuild постоянно разрывает его для всех). Он принимает точки входа в мое приложение и запускает их через vulcanize и мини-код. Выходной файл представляет собой плоский html-файл с крупными разделами. CSS не минимизируется, потому что minifier нарушает новый синтаксис.Полимер: вулканизирующий/минерализующий сайт разбивает его на Firefox

Выходной HTML-код работает корректно в Chrome, однако он не работает в Firefox. Сайт не загружается и следующий регистрируется в консоли:

TypeError: document.registerElement is not a function 
localhost:3000:1:4877 
TypeError: Polymer.Base._getExtendedPrototype is not a function 
localhost:3000:1:1090 
TypeError: this._desugarBehaviors is not a function 
localhost:3000:1:2359 
<snip repeated desugarBehaviors error> 

Можете ли вы сказать мне, почему встроенный версия не работает в одном браузере, но работы в другой, и почему это Firefox, который терпит неудачу? Я не получаю эти ошибки в Chrome.

процесс Мой билд выглядит следующим образом:

build.sh

#!/bin/bash 

build_html () { 
    ./node_modules/.bin/vulcanize --inline-css --inline-scripts $1.html > build/$1.pre.html 
    ./minify-html.js build/$1.pre.html build/$1.html 
} 

echo 1. clean build dir 
rm -r ./build 
mkdir build 

echo 2. copy assets in background 
cp -r assets/ build/ & 

echo 3. vulcanize and minify entry points 
build_html index 
build_html register 
rm build/*.pre.html 

echo 4. copy polyfills 
mkdir -p ./build/bower_components/{classlist,webcomponentsjs} 
cp ./bower_components/classlist/classList.min.js ./build/bower_components/classlist 
cp ./bower_components/webcomponentsjs/webcomponents-lite.min.js ./build/bower_components/webcomponentsjs 
cp ./bower_components/webcomponentsjs/webcomponents.min.js ./build/bower_components/webcomponentsjs 

преуменьшать-html.js

#!/usr/bin/env node 
var hmin = require('html-minifier'); 
var fs = require('fs'); 

var src = fs.readFileSync(process.argv[2]).toString(); 
var res = hmin.minify(src, { 
    removeComments: true, 
    removeCommentsFromCDATA: true, 
    collapseWhitespace: true, 
    conservativeCollapse: true, 
    minifyJS: true, 
    preventAttributesEscaping: true, 
    minifyJS: true, 
    customAttrAssign: [ /\$=/ ] 
}); 

fs.writeFileSync(process.argv[3], res); 

ответ

1

Это наиболее вероятно, что вы пропали без вести библиотеку webcomponents, которая может полилизовать registerElement в некоторых браузерах. Убедитесь, что вы импортируете его везде, где это необходимо.

+0

Оказывается, это могло быть так. Я ранее загружал библиотеку динамически как часть скрипта обнаружения функций, но я либо слишком загружал ее. Я переместил его в тег скрипта, который был размещен до первого импорта html, и он снова работает, как в незастроенной, так и в построенной версии. – FilipW