Web/more

[nunjucks] config.js의 변수를 macro에서 렌더링 되게하기

아랄라랄라 2023. 7. 12. 13:19

 

 

nunjucksRender가 Gulp의 스트림에서 각 파일을 처리할 때마다 data 옵션으로 전달된 객체를 템플릿의 컨텍스트로 사용하게 된다. 즉, 각 템플릿에서는 data 옵션에 정의된 변수를 직접 참조할 수 있어야 한다.

 


그러나 여기서 문제가 발생하는 부분은 Nunjucks의 macro가 별도의 scope를 가지고 있어서 macro 밖에서 정의된 변수를 직접 참조하지 못하는 것이다. 이를 해결하기 위해 변수를 macro에 인자로 전달해야 한다.

 

 

 

//config.js

const config = {
    local_name: "이름",
};

module.exports = config;

 

 

//gulpfile.js

const config = require("./config.js");

function nunjucks() {
    return src(`${paths.src.html}/page/**/*`)
        .pipe(
            nunjucksRender({
                path: [`${paths.src.html}/layout`, `${paths.src.html}/partial`],
                data: config,
            })
        )
        .pipe(dest(paths.build.html))
        .pipe(connect.reload());
}

 

 

// macro

{% macro pageTitle(local_name) %}
    <section class="title">
        <h2 class="title--ttl">타이틀</h2>
        <p class="title--txt"><span>{{local_name}}</span>서브 타이틀</p>
    </section>
{% endmacro %}

👉 변수를 인자로 받고

 

 

// .njk

{% import "../partial/CompTitle.njk" as pageTitle %}

{{ pageTitle.pageTitle(local_name) }}

 

👉 변수를 인자로 보낸다

 

 

 

 

 

 

728x90