* refactor: extract deps & config logic to separate files
* feat: implement a migrator to upgrade to eslint 6
* fix: add required deps for eslint v4
* test: move migrator tests to each standalone plugins
* refactor: use spread operator instead of Object.assign
It is because yorkie is not used anywhere in @vue/cli-service, but only
included for the `lintOn: 'commit'` feature of eslint & typescript
plugin.
Also, a lot of global installation issues are caused by the yorkie
postinstall script. Moving it out of the dependency chain of `@vue/cli`
mitigates such issues.
BREAKING CHANGE:
Users will have to explicitly list their required ESLint version in the
project's package.json.
The major concern behind this change is that ESLint release schedule is
never aligned with Vue CLI's.
See https://eslint.org/blog/2019/04/eslint-v6.0.0-alpha.0-released
So even if we upgraded our built-in ESLint version to v5, we'll see a
new major release of ESLint in the coming months. Meanwhile we can't
easily upgrade the built-in ESLint version again without bumping our
major version number. This could become a maintenance nightmare.
1. In @vue/cli-plugin-eslint 3.1.0+, eslint will be explicitly added to
the project's package.json, so it is **optional**.
2. `optionalDependencies` will still be installed by npm by default,
just no longer cause installation to fail when error happens.
3. ESLint v4 did cause weird errors sometimes, like `npm WARN
ajv-keywords@2.1.1 requires a peer of ajv@^5.0.0 but none is installed.`
Though this warning never caused any errors on my machine, I think it's
good to make the plugin fail-safe.