본문 바로가기
javascript/gulp

[코드정렬] pretty, through2 : 소스코드야 줄서자

by by-choice 2021. 1. 8.
반응형

예로, 아래 코드를 gulp 돌리면, 의미없는 공백들과 제멋대로인 정렬로 소스가 못생겨진다.

pretty + through2 은, 동료에게 '정렬이 왜 이따구인거죠?' 말을 안듣기 위한 플러그인이랄까?

{% set navigation = [
	{ 'name': '1' , 'url': '1.html' },
	{ 'name': '2' , 'url': '2.html' },
	{ 'name': '3' , 'url': '3.html' }
] %}
{% extends "../templates/layout.njk" %}

{% block content %}
    {% for item in navigation %}
        <a href=“{{item.url}}”>{{item.name}}</a>
    <a href=“{{item.url}}”>{{item.name}}</a><!-- 예:실수로 정렬이 틀어졌다! -->
    {% endfor %}
{% endblock %} 
<!DOCTYPE html>
<html>
<head>
  <title>pretty / through2</title>
  <meta charset="utf-8" />
</head>
<body>
  <div>
<!-- 공백 발생 -->
<!-- 공백 발생 -->
        <a href=“1.html”>1</a><!-- 앞 여백 발생 -->
    <a href=“1.html”>1</a><!-- 위 라인과 정렬 틀어짐 -->
<!-- 공백 발생 -->
        <a href=“2.html”>2</a><!-- 앞 여백 발생 -->
    <a href=“2.html”>2</a><!-- 위 라인과 정렬 틀어짐 -->
<!-- 공백 발생 -->
        <a href=“3.html”>3</a><!-- 앞 여백 발생 -->
    <a href=“3.html”>3</a><!-- 위 라인과 정렬 틀어짐 -->
<!-- 공백 발생 -->
<!-- 공백 발생 -->
  </div>
</body>
</html>

1. pretty, through2 설치

npm install --save-dev pretty through2

2. gulpfile 설정

const gulp = require("gulp");
const nunjucksRender = require("gulp-nunjucks-render");
const data = require('gulp-data');
const page_data = require("./src/page_data.json");
const through2 = require("through2"); // ★★★★ add
const pretty = require("pretty"); // ★★★★ add

function prettyGulp(file, enc, callback){ // ★★★★ add
    file.contents = Buffer.from(pretty(file.contents.toString(), { ocd: true}));
    callback(null, file);
}

gulp.task("nunjucks-html", function(){
    return gulp
        .src("src/html/pages/*")
        .pipe(
            data(page_data)
        )
        .pipe
            (nunjucksRender({
                path: ["src/html/templates"],
                /* ★★★★ 
                    넌적스 옵션 중: 
                    trimBlocks:true, 
                    블록태그로 인해 생기는 줄바뀜 삭제, 하지만 원하는 만큼의 결과물 안나옴
                    lstripBlocks:true
                    블록태그로 인해 생기는 공백 삭제, 하지만 원하는 만큼의 결과물 안나옴
                */
            })
        )
        .pipe(through2.obj(prettyGulp)) // ★★★★ add
        .pipe(gulp.dest("dist"));
});
gulp.task(
    "default",
    gulp.parallel("nunjucks-html") 
);

3. 결과물

<!DOCTYPE html>
<html>
  <head>
    <title>pretty / through2</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <div>
      <a href=“1.html”>1</a>
      <a href=“1.html”>1</a>
      <a href=“2.html”>2</a>
      <a href=“2.html”>2</a>
      <a href=“3.html”>3</a>
      <a href=“3.html”>3</a>
    </div>
  </body>
</html>
반응형

댓글