我正在使用Yeoman创建一个生成器,而Yeoman又使用了underscore.js模板 在给定的文件中,我有这个代码:
var
<% _.each(requires, function(require) { %>
<% if(require.shouldApply) { %>
<%= _.camelize(require.name) %> = require('<%= require.name %>'),
<% } %>
<% }); %>
mongoose = require('mongoose'),
Schema = mongoose.Schema;
鉴于require.shouldApply
有时是假的,我不希望产生空行。
例如,对于输入requires: [{shouldApply: false, name: 'zoo'}, {shouldApply: false, name: 'foo'}, {shouldApply: true, name: 'bar'}]
,我得到了这个:
var
zoo = require('zoo'), //note that the line below is blank
bar = require('bar'), //I don't want the blank line above
mongoose = require('mongoose'),
Schema = mongoose.Schema;
有谁知道如何防止underscore.js模板创建这些不需要的空行?
答案 0 :(得分:6)
在JSP中,我们有时会使用(讨厌的)将模板标记扩展到下一行的做法来防止这种情况。
它对于可读性并不理想,但它确实解决了“不需要的换行”问题。
例如:
<% if(require.shouldApply) {
%><%= _.camelize(require.name) %> = require('<%= require.name %>'),
<% } %>
在JSP中我们也有trimDirectiveWhitespaces
和类似的选项 - 这些选项并不完美,但可以提供帮助。你的模板系统也可能有这样的东西。
答案 1 :(得分:1)
您可以尝试减少传入_.each循环的内容,以便只生成应显示的项目。
<% _.each(_.where(requires, {shouldApply: true}), function(require){ %>
答案 2 :(得分:0)
看起来在if语句之外有两行返回将为数组中的每个项生成:
var
<% _.each(requires, function(require) { %> // New Line Here
<% if(require.shouldApply) { %>
<%= _.camelize(require.name) %> = require('<%= require.name %>'),
<% } %> // New Line Here
<% }); %>
mongoose = require('mongoose'),
Schema = mongoose.Schema;
所以,如果你将它们浓缩为:
var <% _.each(requires, function(require) { if(require.shouldApply) { %>
<%= _.camelize(require.name) %> = require('<%= require.name %>'),
<% } }); %>
mongoose = require('mongoose'),
Schema = mongoose.Schema;
这应该可以阻止剩余产出。
答案 3 :(得分:0)
在Yeoman的更新版本中,另一种方法是注册一个流,该流将在生成的工件之后清理多个空白行。这使您可以自由地构建&lt; %%&gt;模板中的代码更自然。
以下示例在转换流中使用gulp-replace。它使用正则表达式来替换所有文件中单换行的双换行符。
'use strict';
var yeoman = require('yeoman-generator');
var chalk = require('chalk');
var yosay = require('yosay');
var replace = require('gulp-replace');
module.exports = yeoman.Base.extend({
writing: function() {
this.registerTransformStream(replace(/\r\n\s*\r\n/g, '\r\n'));
this.fs.copyTpl(
this.templatePath('_someTemplate.js'),
this.destinationPath('someFinalArtifact.js'), {
nameSpace: nameSpace
}
);
}
});
&#13;
不要忘记在生成器的package.json中添加gulp-replace。
参考:&#34;通过流转换输出文件&#34;在http://yeoman.io/authoring/file-system.html。