解决ESLint错误“no-unused-vars”

时间:2018-01-18 13:08:38

标签: javascript youtube-api eslint

错误

由于以下夹板错误,模块构建失败:

  

错误1:'播放器'被分配了一个值,但从未使用 no-unused-vars

     

错误2:' YT '未定义 no-undef

     

错误3:' onYouTubeIframeAPIReady '已定义,但从未使用 no-unused-vars

守则

function videoInit() {
    // Initialise video
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    // Initialise the player
    var player;

    function onPlayerReady(event) {
        event.target.playVideo();
    }

    function onPlayerStateChange(event) {
        if (event.data === YT.PlayerState.ENDED) {
            event.target.playVideo();
        }
    }

    function onYouTubeIframeAPIReady() { 
        player = new YT.Player('player', {
            height: '100%',
            width: '100%',
            videoId: 'ScMzIvxBSi4',
            playerVars : {
                'mute' : 1,
            },
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange,
            },
        });
    }
}

目标

解决 no-unused-vars & no-undef 错误。

功能调用不在本地文件中,而是根据documentation从YouTube API中提供:

  

onYouTubeIframeAPIReady - 当页面完成下载播放器API的JavaScript后,API将调用此函数,这样您就可以在页面上使用API​​。因此,此功能可能会创建您在页面加载时要显示的播放器对象。

可以通过使用忽略错误 no-unused-vars /* eslint-disable no-unused-vars */,但我确信有更好的方法来解决这些问题。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

此函数应该可用作全局变量(= window对象的属性)。就目前而言,它只是一个本地的,在videoInit()内可用 - 但不能从外部调用。所以ESLint实际上是正确的。

使用与...类似的东西。

window.onYouTubeIframeAPIReady = onYouTubeIframeAPIReady;

对于player,如果您打算使用new YT.Player()调用的返回值(播放器实例),则只需要此变量。在这种特殊情况下,您不使用它,因此警告。考虑将videoInit转换为返回Promise的函数(使用player值解析)。