变量未定义,no-undef;我怎样才能绕过这个错误?

Posted

技术标签:

【中文标题】变量未定义,no-undef;我怎样才能绕过这个错误?【英文标题】:Variable is not defined, no-undef; How can I bypass this error? 【发布时间】:2019-12-01 19:17:38 【问题描述】:

我有一个 react-create-app 项目,它在我的公共 index.html 中链接一个专有库,让我可以使用一个名为“SingularPlayer”的变量。

<script src="https://www.something.com/libs/singularplayer.js"></script>

例如,我应该能够:

const previewObj = SingularPlayer(iframeId);

但我不能,因为我不断收到此错误:

第 67 行:'SingularPlayer' 未定义 no-undef

我尝试将这些放在我的 package.json 中,但这些也不起作用:

  "rules": 
    "no-undef": 0
  ,
  "globals": 
    "SingularPlayer": false
  ,
  "env": 
    "SingularPlayer": true
  

编辑:我的项目不会让我运行(npm start),直到我不幸地修复了错误

【问题讨论】:

如果它在全局命名空间中,请尝试window.SingularPlayer(iframeId)。或者使用import 代替脚本标签。 我在我的旧项目中尝试了 window.SingularPlayer,它可以工作,但由于某种原因它不能工作......我无法告诉你为什么......一旦我删除了“window. "只需输入“SingularPlayer”即可。我看看能不能导入脚本 在 eslint 配置中尝试 "globals":"SingularPlayer":"readonly",。 eslint.org/docs/rules/no-undef#rule-details 尝试在window.onload = () =&gt; SingularPlayer(...) 中添加您的代码,这可能是因为您的脚本在 SingularPlayer 加载之前正在运行。 @HåkenLid 不幸的是没用,但是很不错 【参考方案1】:

我遇到了类似的问题 - 即使通过 window.ConstantName 也无法访问全局常量。

感谢this comment 引导我创建一个新的代理 文件,我解决了这个问题。第一行的注释是解决错误的法宝。

// eslint-disable-next-line no-undef
const ConstantNameProxy = ConstantName;
export default ConstantNameProxy;

然后当我需要使用常量时,我​​导入并使用代理如:

import ConstantNameProxy from './path/to/proxy/file';

console.log(ConstantNameProxy);

您当然可以在使用全局常量的每一行之前添加注释,或者在文件级别更全局地禁用错误,但这将是真实代码周围不必要的垃圾量并且可能隐藏其他真正的错误。

【讨论】:

【参考方案2】:

您可以使用以下检查绕过错误,

(typeof fn === "function") - 仅当它是函数时​​才返回 true

const previewObj = ((typeof SingularPlayer === "function") && SingularPlayer(iframeId));

为避免编译错误,建议下载脚本本地参考

【讨论】:

您好,感谢您的回答。不幸的是,我的项目甚至不会启动,无论是否将那行代码替换为我得到那个错误..所以我的 IDE 甚至不会让我编译 不,我没有,但我不确定这是否能解决问题? 我建议下载并保存在本地而不是添加脚本链接【参考方案3】:

如果 'SingularPlayer' 没有定义,它就不会被包含在 JS 中。

您需要将singularplayer.js 文件导入要从中访问的JS 文件中。

import SingularPlayer from 'url/singularplayer.js'

您不能从 ES6 中的 URL 导入模块,如果您必须包含来自其他主机的 JS,请按照以下问题回答:https://***.com/a/44877953/4953804

【讨论】:

它说找不到模块:无法解析'https://..../singularplayer.js'

以上是关于变量未定义,no-undef;我怎样才能绕过这个错误?的主要内容,如果未能解决你的问题,请参考以下文章

React Context 不工作:未定义 no-undef

反应出错:第 25 行:'totalIncome' 未定义 no-undef

在 react.js 中使用 three.js 创建 WebXR 应用程序时,我不断看到“XRWebGLLayer”未定义 no-undef

我怎样才能修复这个承诺,这样我就不会发回未定义的

ESLint 美元($)未定义。 (无非定义)

安装 jest 时未定义 describe