尝试构建Webpack时找不到ESLint依赖项(strip-json-comments)

时间:2018-08-15 17:35:35

标签: webpack eslint

我已经安装了最新的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

在进一步挖掘之后,可以看到我在运行strip-json-comments时安装的npm install eslint的版本实际上是安装NPM包装本身 ...我可以看到此文件的作者及其整个npm团队。 WTF ... idk发生了什么,但是我认为这可能与MyGet.org上的私有存储库提要有关。

谢谢

1 个答案:

答案 0 :(得分:0)

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