eslint 应该列在项目的依赖项中,而不是 devDependencies

Posted

技术标签:

【中文标题】eslint 应该列在项目的依赖项中,而不是 devDependencies【英文标题】:eslint should be listed in the project's dependencies, not devDependencies 【发布时间】:2017-12-09 21:27:38 【问题描述】:

要么我不理解 dependenciesdevDependencies 在节点 100% 中的区别,要么 eslint 在这里是错误的(无法正确分析):

   3:1   error  'chai' should be listed in the project's dependencies, not devDependencies              import/no-extraneous-dependencies
   4:1   error  'chai-enzyme' should be listed in the project's dependencies, not devDependencies       import/no-extraneous-dependencies
   5:1   error  'enzyme' should be listed in the project's dependencies, not devDependencies            import/no-extraneous-dependencies
   7:1   error  'sinon' should be listed in the project's dependencies, not devDependencies             import/no-extraneous-dependencies
   9:1   error  'redux-mock-store' should be listed in the project's dependencies, not devDependencies  import/no-extraneous-dependencies

这些是测试依赖项,为什么说它们应该列在dependencies 中?

附加说明:我们使用 Travis 作为我们的 CI,所以我也不知道这是否会有所不同。

【问题讨论】:

【参考方案1】:

通过将其添加到我的.eslintrc 来解决它:

"import/no-extraneous-dependencies": ["error", "devDependencies": true]

[no-extraneous-dependencies] Add exceptions? #422

根据该用户的回复

你可以在你的 .eslintrc 中设置选项 devDependencies: true 测试文件夹:

规则:import/no-extraneous-dependencies:[错误, devDependencies: true ] 然后你会得到任何被引用的包的报告 不包括依赖项或 devDependencies。 然后你得到 规则的优点,没有来自禁用 cmets 的噪音

我认为这可能对你有用?这就是我使用规则的方式,在 您的情况,因为您将测试代码分成了一个测试 目录。

此外,这篇文章有助于确认我不想在我的依赖项列表中加入其中的一些内容并没有发疯:Sharable ESLint Config

【讨论】:

确保使用 CTRL-C 和 npm start 重新启动你的 node.js 服务器,这样才能赶上 如果您只想对某些文件(即测试)禁用 lint,请查看我的回答。 这可能会导致在非开发模式下运行时缺少依赖项。我认为@magic_al 答案是更好的选择。 @magic_al 的答案更好,因为它将 eslint 配置保存在一个地方 - 更易于理解和维护。【参考方案2】:

如果您想允许在仅测试文件中导入devDependencies,您可以使用array of globs,正如no-extraneous-dependencies 中的documentation 所述:

使用 glob 数组时,如果要检查的文件的名称与数组中的单个 glob 匹配,则该设置将设置为 true(不报告错误),否则设置为 false。

以下设置将仅禁用测试文件的 lint。

"import/no-extraneous-dependencies": ["error", "devDependencies": ["**/*.test.ts", "**/*.test.tsx"]]

这样,从devDependencies 导入的内容仍会报告为错误。

【讨论】:

任何人都知道为什么在 VScode 中添加 Unexpected top-level property "import/no-extraneous-dependencies"... 而报告的错误是 'yaml' should be listed in the project's dependencies, not devDependencies. eslint(import/no-extraneous-dependencies) @Marvin 你的 eslint 文件中有 rules 对象的属性吗? @DavidGilbertson 嗯。我以为我有,但现在尝试添加它,它工作正常。谢谢。【参考方案3】:

我能够通过将缺少的包(在我的例子中是 Typescript 和 Storybook)添加到我的 plugins 目录中的 .eslintrc 来解决它。

我在这篇文章中给出了细节:ESLint error: '@storybook/react' should be listed in the project's dependencies, not devDependencies

【讨论】:

以上是关于eslint 应该列在项目的依赖项中,而不是 devDependencies的主要内容,如果未能解决你的问题,请参考以下文章

Eslint 'rxjs/operators' 应该列在项目的依赖中

当 ref 指向 DOM 元素时,使用 ref.current 作为 useEffect 的依赖是不是安全?

在我们的私有节点依赖项中使用绝对路径?

mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目

为啥反应通常应该是产品依赖而不是开发依赖

无法 npm 使用 eslint 依赖项启动我的 React 项目