npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

wander-pretty

v0.1.4

Published

A tool help to quickly use prettier & eslint on an old project.

Downloads

8

Readme

📚brief view

写这个项目的初衷,是因为最近接手了一个3w+样式错误(eslint airbnb)的项目,因为之后会花时间去维护这个项目,那如果不解决这些问题,以后岂不是很惨。并且现在也有好几人在维护,也需要统一代码风格。因此,用这个项目装到devD ependencies中,然后跑一遍pretty,既对代码做了格式化(.prettierrc),也做了代码检测(.eslintrc),最后还输出了哪些遗留问题(无法被eslint --fix解决掉的),接下来维护起来应该方便很多了吧😊

如果您有更好的解决【老旧工程】样式统一、风格一致性问题的方式,希望您告诉我,一起学习学习

🍰prettier

快速格式化你的代码, 终结各种写法之争

目前来看,在react开发中大多使用prettier默认设置就行了,喜欢js中用单引号的,自行修改singleQuote就行了。

👿eslint

代码检测,让问题代码无处遁形

人工做代码检测是很累的,大部分程式化的工作就交给机器来做就行了。

😄use
  • 另起工程来做
    1. clone到本地
    2. 把旧工程的eslintprettier规则迁移到当前。如旧工程没有的,可以在本目录配置好这两个插件
    3. 执行node index --help(可以查看参数)
    4. 执行node index使用默认参数运行
  • 安装到devDependencies使用命令行
    1. npm install wander-pretty --save-dev
    2. 在项目根目录
    3. pretty --help查看参数
    4. pretty使用默认参数执行
🍎benefit
  • 自动给全部js应用.prettier的样式
  • 输出一个报错的eslint文件,供你选择
📃exhibition
  1. 原始文件目录 image-20190910203508185

  2. 样式奇怪的原始文件

  3. 输出文件目录

  4. 样式漂亮的输出文件 image-20190910203945684

  5. 告诉你哪些eslint没有被解决掉.默认为根目录下的.pretty.error-eslint.json

    {
      "no-undef": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 45
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 31
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 45
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 31
        }
      ],
      "constructor-super": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 3
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 3
        }
      ],
      "no-empty-function": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 17
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 17
        }
      ],
      "react/sort-comp": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 3
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 3
        }
      ],
      "class-methods-use-this": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 13
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 14
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 13
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 14
        }
      ],
      "no-unused-vars": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 14
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 15
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 14
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 15
        }
      ],
      "no-console": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 19
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 20
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 19
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 20
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/utils/index.js",
          "column": 3
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/utils/index.js",
          "column": 19
        }
      ],
      "react/state-in-constructor": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 3
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 3
        }
      ],
      "react/no-unused-state": [
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/components/TestComponent.js",
          "column": 5
        },
        {
          "filePath": "Desktop/projects/mine/pretty-test/src/index.js",
          "column": 5
        }
      ]
    }
👨‍🎓linter-learner

学习使用lint

{
  // import语句排序
  "sort-imports": 0,
  // 驼峰命名变量
  "camelcase": 0,
  // 未定义变量
  "no-undef": 0,
  // --自减号
  "no-plusplus": 0,
  // 下划线使用
  "no-underscore-dangle": 0,
  // 强制使用===号
  "react/jsx-props-no-spreading": 0,
  "eqeqeq": 0,
  // 函数参数重新赋值
  "no-param-reassign": 0,
  // return语句不能赋值
  "no-return-assign": 0,
  // 外部已定义变量名
  "no-shadow": 0,
  // 未使用的变量
  "no-unused-vars": 0,
  // 未命名函数
  "func-names": 0,
  // react的state应该在constructor内声明
  "react/state-in-constructor": 0,
  // react的state\props应该用解构获取值
  "react/destructuring-assignment": 0,
  // 未使用到的表达式
  "no-unused-expressions": 0,
  // 使用array的index作为keys
  "react/no-array-index-key": 0,
  // a 标签提供一个herf地址,键位可达
  "jsx-a11y/anchor-is-valid": 0,
  // img标签需要一个alt属性 或者文字
  "jsx-a11y/alt-text": 0,
  // 非必填数据必须带有默认值
  "react/require-default-props": 0,
  // 数组中禁止出现空的逗号
  "no-sparse-arrays": 0,
  // 默认属性应该定义在class之外
  "react/static-property-placement": 0,
  // 没有用到this的方法应该定义为static方法
  "class-methods-use-this": 0,
  // class内部方法按字典排序
  "react/sort-comp": 0,
  // children有可能只有一个 危险的children
  "react/no-danger-with-children": 0,
  // 一行最长100个字符
  "max-len": 0,
  // for-in 语句应该过滤不需要的属性
  "guard-for-in": 0,
  // 不应该定义空对象参数
  "no-empty-pattern": 0,
  // 可见的非交互性元素有click事件时需要至少一个键位事件
  "jsx-a11y/click-events-have-key-events": 0,
  // 逗号后面加空格
  "comma-spacing": 0,
  // 不要用new String()
  "no-new-wrappers": 0,
  // 一个文件只需要一个class
  "max-classes-per-file": 0,
  // 不要使用ReactDom.findDOMNode
  "react/no-find-dom-node": 0,
  // 不要使用this.refs | 字符串
  "react/no-string-refs": 0,
  // 未重新赋值的变量应该声明为const
  "prefer-const": 0,
  // 使用上一次状态时 应该在setState中用callback
  "react/no-access-state-in-setstate": 0,
  // import语句应该排序
  "import/order": 0,
  // iframe需要一个独立的title属性
  "jsx-a11y/iframe-has-title": 0,
  // 没有用到的state属性
  "react/no-unused-state": 0,
  // props没有用到
  "react/no-unused-prop-types": 0,
  // 不要使用new产生副作用
  "no-new": 0,
  // 应该用解构
  "prefer-destructuring": 0,
  // 禁用部分全局变量
  "no-restricted-globals": 0,
  // 不要有空的block
  "no-empty": 0,
  // Using target="_blank" without rel="noopener noreferrer" is a security risk: see https://mathiasbynens.github.io/rel-noopener
  "react/jsx-no-target-blank": 0,
  // jsx {前不应有新行
  "react/jsx-curly-newline": 0,
  // 箭头函数应该返回值
  "array-callback-return": 0,
  // 重复定义class成员函数
  "no-dupe-class-members": 0,
  // 单独的块级作用域{}
  "no-lone-blocks": 0,
  // `'` can be escaped with `'`, `‘`, `'`, `’`
  "react/no-unescaped-entities": 0,
  // default返回
  "default-case": 0,
  // Caution: `IssueUpgradeStateEnum` also has a named export `KEYMAP`. Check if you meant to write `import {KEYMAP} from '../../constants/IssueUpgradeStateEnum'` instead
  "import/no-named-as-default-member": 0,
  // Function declared in a loop contains unsafe references to variable(s) 'file'  no-loop-func
  "no-loop-func": 0,
  // 禁用不必要的转义
  "no-useless-escape": 0,
  // jsx缩进
  "react/jsx-indent": 0
}