2013-11-14 2 views
3

Yeoman을 사용하여 생성기를 만들고 있는데,이 생성기는 underscore.js 템플릿을 사용합니다. 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

'if' 문 (내용 포함)을 모두 한 줄에 넣으면 여분의 줄이 생깁니 까? – ArrayKnight

답변

5

JSP에서 우리는 때때로 JSP 태그가 다음 줄로 확장되는 것을 방지하기 위해 (성가신) 연습을 사용합니다.

가독성을 위해 이상적인 것은 아니지만 '원하지 않는 줄 바꿈'문제를 해결합니다. 예를 들어

: - 완벽하지,하지만 도움을 JSP에서

<% if(require.shouldApply) { 
%><%= _.camelize(require.name) %> = require('<%= require.name %>'), 
<% } %> 

우리는 또한 trimDirectiveWhitespaces과 비슷한 옵션이 있습니다. 당신의 템플릿 시스템은 이와 비슷한 것을 가질 수도 있습니다.

1

_.each 루프로 전달되는 내용을 줄이면 표시해야하는 항목 만 생성 할 수 있습니다.

<% _.each(_.where(requires, {shouldApply: true}), function(require){ %> 
+1

이것은 내가 Lo-Dash의 자동 체이닝을 Underscore보다 훨씬 좋아하는 이유입니다. '<% _ (requires) .where ({shouldApply : true}).각 (함수 (필수) {%>' – idbehold

+0

) 나는'if' 라인이 없어도 나는 여전히 쓸모없는 빈 줄을 계속 발견했다 !!! 왜 이해할 수없는 .. .. – renatoargh

+0

밑줄도 체인이있다. – Sukima

0

배열의 각 항목에 대해 생산 될 경우 문 외부 2 개 개의 라인 반환있다 같습니다 :

var <% _.each(requires, function(require) { if(require.shouldApply) { %> 
<%= _.camelize(require.name) %> = require('<%= require.name %>'), 
<% } }); %> 
mongoose = require('mongoose'), 
Schema = mongoose.Schema; 
: 당신이 그들을 응축한다면

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; 

이렇게하면 잉여 출력이 중지됩니다.

0

더 많은 최신 버전의 Yeoman에서 대안은 생성 된 아티팩트에 여러 빈 줄을 정리하는 스트림을 등록한 후입니다. 따라서 더 자연스럽게 템플릿에 < % %> 코드를 구조화 할 수 있습니다.

아래의 예는 변환 스트림에서 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 
 
     } 
 
    ); 
 
    } 
 
});

발전기의 package.json에 꿀꺽가-교체 추가하는 것을 잊지 마십시오.

참조 : "출력 파일을 스트림을 통해 변환"은 http://yeoman.io/authoring/file-system.html입니다.

관련 문제