Я нашел решение. Выглядит не идеально, но работает. Сборка делится на 3 этапа:
Компиляция с помощью nunjucks в каталог .temp
на основе PolymerJson
return gulp.src([
...polymerJson.sources,
polymerJson.entrypoint
], {base: '.'})
.pipe(gulpif(/\.(html|js|json)$/, nunjucks.compile(metadata, {
tags: {
variableStart: '{$',
variableEnd: '$}'
}
})))
.pipe(gulpif(/\.(html|js)$/, replace('bower_components', '../bower_components')))
.pipe(gulp.dest(config.tempDirectory));
Оптимизация и сборка проекта
let polymerProject = null;
console.log(`Deleting ${config.build.rootDirectory} and ${config.tempDirectory} directories...`);
del([config.build.rootDirectory, config.tempDirectory])
.then(() => {
console.log(`Compiling template...`);
const compileStream = template.compile(config, polymerJson)
.on('end', () => {
polymerProject = new polymerBuild.PolymerProject(buildPolymerJson);
});
return waitFor(compileStream);
})
.then(() => {
console.log(`Polymer building...`);
const sourcesStream = polymerProject.sources()
.pipe(polymerProject.splitHtml())
// splitHtml doesn't split CSS https://github.com/Polymer/polymer-build/issues/32
.pipe(gulpif(/\.js$/, uglify()))
.pipe(gulpif(/\.(html|css)$/, cssSlam()))
.pipe(gulpif(/\.html$/, html.minify()))
.pipe(gulpif(/\.(png|gif|jpg|svg)$/, images.minify()))
.pipe(polymerProject.rejoinHtml());
Не забудьте переместить файлы из каталога build/.temp
:
return gulp.src(`${config.build.rootDirectory}/${config.tempDirectory}/**/*`,
{base: `${config.build.rootDirectory}/${config.tempDirectory}`})
.pipe(gulpif(/\.(html|js)$/, replace('../bower_components', 'bower_components')))
.pipe(gulpif(/\.(html|js)$/, replace('/.temp', '')))
.pipe(gulp.dest(config.build.rootDirectory));
Вот полный gulpfile.js
person
ozasadnyy
schedule
15.01.2017