首先运行分析器时聚合物构建失败
polymer-build fails when runs analyzer first
在 project.sources()
的 PR #77 which made polymer-build to run polymer-analyzer 之后,构建任务失败。
我正在使用 nunjucks 预渲染我的模板,这就是分析器失败的原因。
Polymer({
is: 'my-app',
properties: {
page: {
type: String,
reflectToAttribute: true
},
pages: {
type: Array,
value: {$ pages | dump | safe $} // fails here
}
}
});
我的 gulp task 看起来像:
return project.sources()
.pipe(gulpif('**/*.{html,js,json}', template.compile(Object.assign({}, metadata, resources))))
.pipe(project.splitHtml())
...
我可以禁用或推迟(首选)分析器吗?
聚合物分析仪支持标准 JavaScript。如果您正在使用某种替代语法编写,则需要在该语法到达分析器之前将其转换出来。 polymer-build
库是为这个用例制作的。您可以构建 Gulp 管道,并在文件到达分析器之前执行您的自定义转换。
在此处查看 polymer-build
库:https://github.com/Polymer/polymer-build
希望对您有所帮助!
为了补充 Justin 的回答,下面是一个示例:
return gulp.src('src/')
.pipe(splitHTML())
.pipe(gulpif('**/*.{html,js,json}', template.compile(Object.assign({}, metadata, resources))))
.pipe(rejoinHTML())
.dest('lib/');
// once that is complete...
return project.sources()
// .pipe(... the rest of your build pipeline!
您只需要确保您的 polymer.json 指向您的 lib/
源目录而不是 src/
,因为分析器需要从双节棍 lib/
目录。
我找到了解决办法。看起来并不完美,但有效。构建分为3个步骤:
基于PolymerJson
用nunjucks编译到.temp
目录
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
在 project.sources()
的 PR #77 which made polymer-build to run polymer-analyzer 之后,构建任务失败。
我正在使用 nunjucks 预渲染我的模板,这就是分析器失败的原因。
Polymer({
is: 'my-app',
properties: {
page: {
type: String,
reflectToAttribute: true
},
pages: {
type: Array,
value: {$ pages | dump | safe $} // fails here
}
}
});
我的 gulp task 看起来像:
return project.sources()
.pipe(gulpif('**/*.{html,js,json}', template.compile(Object.assign({}, metadata, resources))))
.pipe(project.splitHtml())
...
我可以禁用或推迟(首选)分析器吗?
聚合物分析仪支持标准 JavaScript。如果您正在使用某种替代语法编写,则需要在该语法到达分析器之前将其转换出来。 polymer-build
库是为这个用例制作的。您可以构建 Gulp 管道,并在文件到达分析器之前执行您的自定义转换。
在此处查看 polymer-build
库:https://github.com/Polymer/polymer-build
希望对您有所帮助!
为了补充 Justin 的回答,下面是一个示例:
return gulp.src('src/')
.pipe(splitHTML())
.pipe(gulpif('**/*.{html,js,json}', template.compile(Object.assign({}, metadata, resources))))
.pipe(rejoinHTML())
.dest('lib/');
// once that is complete...
return project.sources()
// .pipe(... the rest of your build pipeline!
您只需要确保您的 polymer.json 指向您的 lib/
源目录而不是 src/
,因为分析器需要从双节棍 lib/
目录。
我找到了解决办法。看起来并不完美,但有效。构建分为3个步骤:
基于PolymerJson
用nunjucks编译到.temp
目录
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