【发布时间】: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 上的私人存储库提要有关...
谢谢
【问题讨论】: