Meteor a standardní vlákna

Integrace standardu s Meteorem je skvělá předběžná zkušenost. Jednoduše jej nainstalujte jako závislost pro vývojáře a poté přidejte skript NPM pro spuštění linter:

$ meteor npm install --save-dev standard

Skript npm v package.json může vypadat následovně:

{
  "scripts": {
    "lint": "standard",
    "lint:fix": "standard --fix"
  }
}

Super snadné a výkonné. V určitém okamžiku však můžete narazit na chyby analýzy, protože v Meteoru můžete ve skutečnosti dělat následující:

import '../some/module' // valid

export const somefunction = function () {
  import { dependency } from '../some/dependency' // this will cause trouble
  // ...
}

Aplikace Meteor poběží dobře, ale váš linter se při analýze souboru jednoduše zhroutí. Vyhodí chybu, že importy jsou povoleny pouze na nejvyšší úrovni, a pak přeskočí skenování souboru kvůli dalším problémům.

Co můžete udělat, abyste to vyřešili

Můžete samozřejmě změnit všechny importy mimo nejvyšší úroveň na dynamické importy (podporované od Meteor 1.5), ale to by také vyžadovalo změnit všechny příslušné funkce na async nebo zpracovat návratové hodnoty z Promise .

Všechny tyto importy můžete také přepsat do uzlu require styl a linter je opět šťastný.

Můžete však ponechat svůj kód tak, jak je, a provést drobné změny pomocí standard .

standardx na záchranu

Pomocí standardx můžete přepsat výchozí pravidla eslint pro standard a deklarovat allowImportExportEverywhere být true . Dále můžete integrovat eslint pluginy, jako je eslint-plugin-security (který použijeme v nadcházejících příkladech).

Následující průvodce vám v několika krocích ukáže, jak se to dělá.

1. Nahraďte standardní za standardníx

To se provádí ve dvou řádcích. Všimněte si, že také nainstalujeme další plugin, abychom mohli použít babel k transpilaci našeho kódu, takže budeme vždy připraveni na nejnovější funkce ES-Next.

$ meteor npm uninstall --save-dev standard
$ meteor npm install --save-dev standardx @babel/eslint-parser @babel/core eslint-plugin-security

2. Aktualizujte package.json

Od standard již není k dispozici, skripty je také třeba aktualizovat, aby volaly standardx :

{
  "scripts": {
    "lint": "standardx",
    "lint:fix": "standardx --fix"
  }
}

Pokud navíc narazíte na nějaké problémy související s Babel, můžete zkusit přidat prázdné "babel" Objekt:

{
  "scripts": {
    "lint": "standardx",
    "lint:fix": "standardx --fix"
  },
  "babel": {}
}

To řeší chyby související s chybějícími konfiguracemi Babel, které vyžaduje @babel/core .

Pokud používáte nástroje jako istanbul, možná už máte babel záznam ve vašem package.json .

3. Definujte vlastní eslintConfig

Posledním krokem je nakonfigurovat eslint tak, aby podporoval import odkudkoli. Pokud se ptáte sami sebe, proč nyní eslint, můžete se podívat na standard repos vidět, je založen na eslint.

Konfigurace je v package.json :

{
  "eslintConfig": {
    "parser": "@babel/eslint-parser",
    "parserOptions": {
      "sourceType": "module",
      "allowImportExportEverywhere": true
    },
    "plugins": [
      "security"
    ],
    "extends": [
      "plugin:security/recommended"
    ]
  }
}

Díky tomu nyní máte plnou podporu pro vaše prostředí Meteor plus integrovaný plugin, který rozšiřuje standard o několik pravidel.

Kromě toho můžete také definovat vlastní pravidla:

{
  "eslintConfig": {
    "parser": "@babel/eslint-parser",
    "parserOptions": {
      "sourceType": "module",
      "allowImportExportEverywhere": true
    },
    "plugins": [
      "security"
    ],
    "extends": [
      "plugin:security/recommended"
    ],
    "rules": {
      "brace-style": [
        "error",
        "stroustrup",
        {
          "allowSingleLine": true
        }
      ]
    }
  }
}

Výše uvedený kód je pouze příkladem, který by umožnil napsat následující kód

if (condition) {
  // action a
} else {
  // action b
}

v následujícím formátu

if (condition) {
  // action a
} 

else {
  // action b
}

Souhrn

Těmito několika kroky můžete skutečně těžit ze standardního linteru a přitom se vyhnout nutnosti měnit strukturu importu. Další pluginy také zlepší kvalitu vašeho kódu v závislosti na případu použití. Analyzátor by měl v budoucnu zabránit nutnosti neustále aktualizovat pravidla pro případ, že by Meteor integroval novou okrajovou funkci ES-next, jak tomu bylo dosud.

Zanechte prosím komentář, pokud narazíte na nějaký problém.