ReactJS 错误未能编译 'define' 未定义

IT技术 javascript jquery reactjs sticky
2021-04-26 14:31:21

我试图编译的应用程序没有使用外部 jquery 及其关联的 JS 文件进行编译。当我尝试将这些文件链接到 ReactJS 应用程序中的 HTML 页面时,它会引发以下错误。

错误是:

'define' 没有定义 no-undef。

此错误来自 jquery.js 文件,该文件本质上是外部文件,显示此错误的行是:

if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
}

有一个 jquery.sticky.js 文件,添加后我收到这些错误。

'jQuery' 未定义 no-undef

'padding' 未定义 no-undef

此错误来自以下几行

 padding =  s.stickyElement.innerWidth() - s.stickyElement.width();

在此处输入图片说明

基本上,关键是我正在尝试将 HTML 模板转换为 ReactJS 模板,但我坚持只添加外部 JS 文件,默认情况下 ReactJS 会编译这些文件以查看是否符合标准。除了 JS 文件设置之外,我能够将整个主题转换为 React。我需要这方面的帮助。

欢迎任何建议:-)

3个回答

您所看到的只是一个违反 ESlint 规则的内容,它表明您不能在未先定义变量的情况下使用它。例如,以下将导致错误:

a = 5

虽然这行得通:

var a = 5;

问题是你不能定义你正在使用的变量,jQuery因为它们已经被全局定义了。不过 ESLint 并不知道这一点,只是认为jQuery就像您忘记定义的任何其他变量一样。

您有多种选择,一种是完全禁用此 ESLint 规则。为此,您只需在文件顶部添加以下内容:

/* eslint no-undef: "off"*/

请注意,no-undef错误消息中包含了规则名称

更好的选择是保持规则启用,但让 ESLint 知道变量像jQuerypadding是由外部包提供的全局变量。为此,您只需将以下内容添加到文件顶部:

/* global jQuery, padding */

请记住,es-lint“编译”错误本身并不是真正的编译错误,您发布的代码是有效的代码,否则会在浏览器中按原样工作。有时 ESLint 规则可能比一般开发人员希望的更严格。在这种情况下,您可以使用这些相同的方法来禁用某些规则。但始终尝试理解规则的含义,并考虑如何在不完全禁用规则的情况下修复代码。

错误来自您的eslint参数。amd环境开启时,eslint为define和require注册全局。

在你的.eslintrc.json集合中:

"env": {
    "amd": true
},

如果你使用 webpack,你可能在 webpack 配置中缺少配置部分。

我通常将以下内容添加到我的 webpack 配置中:

module.exports = {
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery',
      'window.jQuery': 'jquery',
    }),
  ],
}