Na semana passada, meu amigo Eli Perelman compartilhou Aplicativos modernos em JavaScript com NeutrinoO Neutrino é uma nova e incrível ferramenta do Node.js para criar aplicativos incríveis com o mínimo de esforço. Não há necessidade de aprender webpack, vasculhar plug-ins babel ou pesquisar o que exatamente é necessário para colocar um aplicativo React.js em funcionamento – basta instalar o Neutrino e pronto! Fiquei muito impressionado com o trabalho do Eli e com a facilidade de desenvolvimento para personalização.
Uma personalização importante para mim foi a capacidade de modificar as regras padrão de linting e executar a rotina de linting a partir da linha de comando quando eu quisesse. O Neutrino fornece um conjunto de regras padrão do ESLint e executa o linting enquanto o usuário modifica o código, mas também é importante testar se o linting é aprovado na CI. Vamos ver como podemos criar regras de linting personalizadas com nossa própria predefinição personalizada!
Etapa 1: Criando uma predefinição
As predefinições permitem que o senhor personalize elementos do seu aplicativo Neutrino, como regras do ESLint, plug-ins do Babel, caminhos e outras configurações globais de todo o aplicativo. Primeiro, vou mostrar ao senhor o código das regras de linting personalizadas e, em seguida, explicarei o que está acontecendo:
const lint = require('neutrino-lint-base');
const merge = require('deepmerge');
module.exports = neutrino => {
// Implement custom linting
lint(neutrino);
neutrino.config.module
.rule('lint')
.loader('eslint', props => merge(props, {
options: {
globals: ['describe', 'expect', 'jest', 'test', 'document', 'window', 'fetch'],
rules: {
// Don't require () for single argument arrow functions
'arrow-parens': 'off',
// Don't require trailing commas
'comma-dangle': 'off',
// Don't require file extensions on imports
'import/extensions': 'off',
// Don't mark as unresolved without extensions
'import/no-unresolved': 'off',
// Don't let ESLint tell us how to use whitespace for imports
'padded-blocks': 'off',
// Hold off on propTypes for now
'react/prop-types': 'off'
},
baseConfig: {
extends: ['airbnb-base', 'plugin:react/recommended']
}
}
}))
};
Enviando neutrino para lint prepara o aplicativo Neutrino para o linting. Em seguida, usamos merge para mesclar profundamente a configuração de linting personalizada com nossas próprias regras:
- Estender
airbnb-baseAs regras de linting com são um conjunto muito popular de diretrizes do ES6 - Estender as diretrizes recomendadas de linting do React.js
- Especifique quais globais serão permitidos durante a criação de linting
- Definir valores para regras muito específicas do ESLint que queremos ou não aplicar
É claro que as regras que personalizei acima são totalmente de minha preferência; o senhor não precisa estender nenhuma biblioteca ESLint existente (como fiz com airbnb e React) e pode aplicar as regras que quiser.
Passo 2: .eslintrc.js
Se quiser executar o linting a partir da linha de comando a qualquer momento (no caso de CI ou de um gancho pós-compromisso, por exemplo), você precisará criar um .eslintrc.js para iniciar o linting:
const Neutrino = require('neutrino');
const pkg = require('./package.json');
const api = new Neutrino(pkg.config.presets);
module.exports = api.custom.eslintrc();
.eslintrc.js cria uma instância do Neutrino com predefinições definidas em package.json (falaremos sobre isso na próxima seção) e expõe um eslintrc() que executa a rotina lint.
Etapa 3: Modificar package.json
Com a predefinição criada com suas regras de linting personalizadas em mente, algumas alterações no package.json devem ser feitas. A primeira é adicionar esse arquivo de predefinição personalizado ao diretório config.presets :
"config": {
"presets": [
"neutrino-preset-react",
"conduit-preset.js"
]
},
Em seguida, precisaremos adicionar a predefinição do airbnb do Neutrino à nossa lista de dependências:
yarn add neutrino-preset-airbnb-base -dev
Por fim, adicionaremos um lint para o scripts para que possamos executar o linting a partir da linha de comando:
"scripts": {
"lint": "./node_modules/eslint/bin/eslint.js --ext .js,.jsx src/ test/",
}
Agora podemos executar o seguinte na linha de comando:
yarn lint
Observe também que a regra de linting personalizada é aplicada ao manual lint bem como durante o recarregamento ao vivo do webpack e a rotina de linting!
Adoro o Neutrino porque ele requer configuração mínima para entrar em funcionamento, mas a configuração personalizada é fácil quando o senhor precisa. Fique de olho no avanço do Neutrino, pois o desenvolvimento está sendo feito rapidamente e a comunidade está se unindo em torno desse projeto incrível!