【问题标题】:ESLint dependency (strip-json-comments) not being found when trying Webpack build尝试 Webpack 构建时未找到 ESLint 依赖项(strip-json-comments)
【发布时间】:2019-01-22 14:59:51
【问题描述】:

我已经安装了最新的 webpack 和 eslint 包,以便开始使用 eslint-loader 等。在安装完所有内容并准备好我的配置文件后,我在尝试运行 webpack 构建时开始收到此错误:

Error: stripComments is not a function

我发现这个方法是在一个 eslint 文件中使用的,当查看 ESLint npm 包页面时,我可以看到应该是对 strip-json-comments 包的依赖。

https://www.npmjs.com/package/eslint(转到 Dependencies,你会看到那个 dep)

但是,在我的项目中全新安装 eslint 后,我不认为这是我的 package-lock.json 文件中的依赖项:

"eslint": {
      "version": "4.19.1",
      "resolved": "https://www.myget.org/F/legacy/npm/eslint/-/eslint-4.19.1.tgz",
      "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=",
      "dev": true,
      "requires": {
        "ajv": "5.5.2",
        "babel-code-frame": "6.26.0",
        "chalk": "2.4.1",
        "concat-stream": "1.6.2",
        "cross-spawn": "5.1.0",
        "debug": "3.1.0",
        "doctrine": "2.1.0",
        "eslint-scope": "3.7.3",
        "eslint-visitor-keys": "1.0.0",
        "espree": "3.5.4",
        "esquery": "1.0.1",
        "esutils": "2.0.2",
        "file-entry-cache": "2.0.0",
        "functional-red-black-tree": "1.0.1",
        "glob": "7.1.2",
        "globals": "11.7.0",
        "ignore": "3.3.10",
        "imurmurhash": "0.1.4",
        "inquirer": "3.3.0",
        "is-resolvable": "1.1.0",
        "js-yaml": "3.12.0",
        "json-stable-stringify-without-jsonify": "1.0.1",
        "levn": "0.3.0",
        "lodash": "4.17.10",
        "minimatch": "3.0.4",
        "mkdirp": "0.5.1",
        "natural-compare": "1.4.0",
        "optionator": "0.8.2",
        "path-is-inside": "1.0.2",
        "pluralize": "7.0.0",
        "progress": "2.0.0",
        "regexpp": "1.1.0",
        "require-uncached": "1.0.3",
        "semver": "5.5.0",
        "strip-ansi": "4.0.0",
        // IT SHOULD BE RIGHT HERE! :(
        "table": "4.0.2",
        "text-table": "0.2.0"
      }

npm 网站上的所有其他依赖项(请参阅上面的链接)都在此列表中,除了 strip-json-comments,这可以完全解释为什么在运行时找不到它。

有人知道为什么会这样吗?我试着用谷歌搜索这个问题,认为这是他们这边的一个错误,但我没有看到很多其他人在谈论这个,所以我觉得它在某种程度上只影响了我。我发现另一个包也使用它作为依赖项,它实际上在package-lock.json 中,正如我所期望的那样。该软件包称为rc。不确定它到底是做什么用的,但这是我能找到的对 strip-json-comments 的唯一引用。

更新

我发现strip-json-comments 导出的类型是EventEmitter,这完全可以解释为什么它不能像函数一样使用。肯定有某种冲突发生了,因为 webpack 想把这个东西当成一个函数来使用,而它显然不是一个函数:

这个包的主文件设置为./lib/npm.js,如果我查看该文件,我会看到:

var npm = module.exports = new EventEmitter()

这显然不是一个函数......这是怎么回事:(

更新 2

好吧,经过一番挖掘,我可以看到我在运行npm install eslint 时安装的strip-json-comments 版本实际上是INSTALLING NPM THE PACKAGE ITSELF...我可以看到作者该文件及其整个npm 团队。 WTF...知道发生了什么,但我认为这可能与我在 MyGet.org 上的私人存储库提要有关...

谢谢

【问题讨论】:

    标签: webpack eslint


    【解决方案1】:

    好的,我发现问题出在 MyGet.org 本身...我在那里有一个私人提要,然后我将 npmjs.org 镜像到。出于某种绝对疯狂的原因,我的私人订阅源中的 strip-json-comments 包以某种方式损坏,它在 npmjs.org 端解析到的实际包是 npm 本身。就像您在安装 npm 时下载的实际软件包一样,正在使用这个小注释剥离软件包。我完全不知道这是怎么发生的,但我刚刚创建了一个新的提要并重新镜像了软件包,现在一切正常......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2017-07-02
      • 2019-07-11
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多