【Nuxt】head에 기술한 JavaScript가 2회 실행되어 빠진 이야기 【SPA】

3178 단어 nuxt.js

증상



nuxt.config.js에서 다음 설정을 구성합니다.

nuxt.config.js
    mode: 'spa',
    head: {
        script: [
            {
                innerHTML: `(function(){console.log('HelloWorld!')}());`
            }],
        __dangerouslyDisableSanitizers: ['script'],
    },

시작해보기


HelloWorld!가 두 번 출력됩니다.

두 번 불리는 원인


  • 빌드 된 HTML에 나열된 스크립트 태그가로드됩니다 (첫 번째 출력).
  • 스크립트 태그를 비교한다.
    「html에 기재되어 있는 Script 태그」와 「nuxt.config.js에 정의되고 있는 Script 태그」로 비교되어, 차이가 있을 경우에 Script 태그가 재배치된다.
    이 때 "nuxt.config.js에 정의 된 Script 태그"가 형식이 작성된 상태의 내용과 비교되기 때문에 차이가있는 것으로 간주되고 태그가 재배치됩니다.

    html에 나열된 스크립트 태그
    (function(){console.log('HelloWorld!')}());
    

    비교에 사용되는 서식이 지정된 스크립트 태그
    (function (){console.log('HelloWorld!')}());
    
  • 재배치된 Script 태그가 로드됩니다. (두 번째 출력)

  • 대책



    재배치된 Script 태그의 내용을 복사하고 nuxt.config.js의 내용을 바꿉니다.

    nuxt.config.js
        mode: 'spa',
        head: {
            script: [
                {
                    innerHTML: `(function(){console.log('HelloWorld!')}());`
                }],
            __dangerouslyDisableSanitizers: ['script'],
        },
    

    좋은 웹페이지 즐겨찾기