2015-11-19 16 views
5

Aşağıdaki anahtarlama örneği deyiminde olduğu gibi yazım hataları yakalamak mümkün mü?Javascript içe aktarma tanıtıcısı undefined

Tercih edilen yol, bir uyarı/hata bildirmek olmalıdır. Şu anda için const eklenmesi, tanımlanmamışsa çalışma zamanında bir TypeError yükseltmek için kullanılabilir.

actionTypes.js

export const UPDATE_REQUEST = 'UPDATE_REQUEST'; 

reducer.js

import * as types from '../constants/actionTypes'; 

export default function pouchdbReducer(state = {}, action) { 
    switch (action.type) { 
    case types.UPDDATE_REQUEST: 
     // there is a typo above and it evaluates to `undefined` 
     // this code would never be reached - how to make it an error 
     return Object.assign({}, state, {updated: true}); 
    default: 
     return state; 
    } 
} 

GÜNCELLEME: @ nikc.org gibi

namespace seçeneğiyle eslint-plugin-import böyle hatalar tüylenme kullanılabilir cevap verdi. eslint config

https://github.com/bmihelac/test-js-import-undefined/tree/eslint-plugin-import

İlgili parçasıdır: Burada

yapılandırma ve demo ile küçük depo olduğunu

"plugins": ["import"], 
"rules": { 
    "import/namespace": [2], 
+4

Peki, bu gibi hataları yakalamaya çalışırken sorun, mutlaka bir hata değil. Kodla ilgili yanlış bir şey yok, başka bir deyişle JavaScript kurallarına göre. – Pointy

+0

@Pointy es6 modülleri olarak statik Bazı istatistik analizcilerin bu gibi yazım hataları bulabileceğini umuyorum. – bmihelac

+0

Doğru, muhtemelen akıllı statik analizin en azından yanlış yazılan sabitin yokluğunu fark edeceğidir. – Pointy

cevap

0

ESLint için eslint-plugin-import eklentisi import s ve export s statik analiz yapar ve hakemizin yanlış yazdığınız yerdeki sorun da dahil olmak üzere farklı ölçütlerdeki hataları veya uyarıları yükseltmek üzere yapılandırılabilir. İçe aktarılmış bir simgeye nce.

Sorunu tamamen ortadan kaldırmak için, Tern no'lu bir bakış açısına sahip olabilirsiniz; bu da, yazım hatalarını ve yazım hatalarını tamamen ortadan kaldıran bir çok editörde kod bilgisi verir.

+1

@aschipfl Nasıl bir cevap vermiyor? Ben sadece onu çok kısa bulursanız, cevap vermek için prosaic kabartması ile yanıtı doldurabilirdim, ama hiçbir değer kalamazdı. Soru, "içe aktarılan sembollere geçersiz referanslar bulmak için statik analiz kullanabilir misiniz?" Cevabım: "Evet yapabilirsin, işte sadece bunu yapan bir araç." Bu nasıl bir cevap değil? –

+0

@ nikc.org - "namespace", aradığım eslint-plugin-import seçeneğidir. – bmihelac

1

Sorumluluk Reddi, tern-lint numaralırayıcım.

"Bilinmeyen özellik" gibi hataları bildirebilen tern-lint'u kullanmanızı öneririz.

Bu linter'i komutla veya destekleyen bir düzenleyici ile (Emacs, Atom, CodeMirror veya Eclipse) kullanabilirsiniz. (Onları kırmak için istekli olup olmadığını ve) bunları içe nasıl eylemleri türlerinin sayısına bağlı olarak varsayalım

enter image description here

+0

tern-lint ümit verici görünüyor, ama eslint-plugin-import kullanımı daha kolay görünüyor – bmihelac

+0

@bmihelac tern-lint ile zor olanı lütfen söyler misiniz lütfen. Komutla tern-lint kullanımı commons değil, bu yüzden lütfen bunu geliştirmek için önerilerinizi iletin, teşekkürler! – Angelo

+0

zaten eslint kullandığım gibi, eslint-plugin-import kurulumu çok kolaydı. Ben de sumru kullanıyorum ama maalesef tern-lint için vim editörü için kutu dışı destek yok (bu yüzden eslint-plugin-import'u kurmak daha kolaydı dedim). Ayrıca, zamanın zamanla gelişeceğini (büyük ihtimalle tern-lint'ten beklenebileceğini tahmin) daha büyük projeler için tern'in yavaş yanıt verebileceğini ve zaman aşımlarının olabileceğini keşfettim. – bmihelac

0

Eclipse tern.java ile Burada bir ekran görüntüsü hafifçe değişebilir.

Belki böyle bir şey:

import {TYPE_ONE, TYPE_TWO} from '../constants/firstActionTypes'; 
import {TYPE_THREE} from '../constants/secondActionTypes'; 

export default function pouchdbReducer(state = {}, action) { 
    switch (action.type) { 
    case TTYPE_ONE: 
     // Linting should identify this easily now 
     return Object.assign({}, state, {updated: true}); 
    default: 
     return state; 
    } 
} 

Tipik linter oldukça kolay olduğunu alabilirsiniz ve bir yan yararı kaygılarına da eylemleri kadar zarar verebilir olmasıdır.