You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.1 KiB
66 lines
2.1 KiB
const merge = require('deepmerge');
|
|
const clone = require('lodash.clonedeep');
|
|
const { join } = require('path');
|
|
|
|
const MODULES = join(__dirname, 'node_modules');
|
|
|
|
module.exports = (neutrino, options) => {
|
|
const isNotDev = process.env.NODE_ENV !== 'development';
|
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
neutrino.eslintrc = () => {
|
|
const options = clone(neutrino.config.module.rule('lint').use('eslint').get('options'));
|
|
|
|
options.extends = options.baseConfig.extends;
|
|
options.useEslintrc = true;
|
|
options.env = options.envs.reduce((env, key) => Object.assign(env, { [key]: true }), {});
|
|
options.globals = options.globals.reduce((globals, key) => Object.assign(globals, { [key]: true }), {});
|
|
['envs', 'baseConfig', 'failOnError', 'emitWarning', 'emitError'].map(method => delete options[method]);
|
|
|
|
return options;
|
|
};
|
|
|
|
neutrino.config
|
|
.resolve
|
|
.modules
|
|
.add(MODULES)
|
|
.end()
|
|
.end()
|
|
.resolveLoader
|
|
.modules
|
|
.add(MODULES)
|
|
.end()
|
|
.end()
|
|
.module
|
|
.rule('lint')
|
|
.test(options.test || /\.(js|jsx)$/)
|
|
.pre()
|
|
.when(options.include, rule => rule.include.merge(options.include))
|
|
.when(options.exclude, rule => rule.exclude.merge(options.exclude))
|
|
.use('eslint')
|
|
.loader(require.resolve('eslint-loader'))
|
|
.options(merge({
|
|
failOnError: isNotDev,
|
|
emitWarning: isNotDev,
|
|
emitError: isNotDev,
|
|
cwd: neutrino.options.root,
|
|
useEslintrc: false,
|
|
root: true,
|
|
plugins: ['babel'],
|
|
baseConfig: {},
|
|
envs: ['es6'],
|
|
parser: 'babel-eslint',
|
|
parserOptions: {
|
|
ecmaVersion: 2017,
|
|
sourceType: 'module',
|
|
ecmaFeatures: {
|
|
objectLiteralDuplicateProperties: false,
|
|
generators: true,
|
|
impliedStrict: true
|
|
}
|
|
},
|
|
settings: {},
|
|
globals: ['process'],
|
|
rules: {}
|
|
}, options.eslint || {}));
|
|
};
|
|
|