Babel ESLint: TypeError: Cannot read property 'range' of null

匿名 (未验证) 提交于 2019-12-03 00:48:01

问题:

I use babel-eslint to lint/fix my code. Worked great until I wanted to adopt some ES2017 async await found overhere.

I changed my React app accordingly, allbeit slightly different:

The relevant part of my index.js:

async function renderApp() {   const store = await configureStore()    const history = syncHistoryWithStore(browserHistory, store, {     selectLocationState: state => state.get('routing')   })    ReactDOM.render(     <AppContainer>       <MuiThemeProvider muiTheme={muiTheme}>         <Provider store={store}>           <Router history={history} routes={routes(store)} />         </Provider>       </MuiThemeProvider>     </AppContainer>,     document.getElementById('root')   ) }   renderApp() 

My store:

// @flow  import 'babel-polyfill'  import { addFormSubmitSagaTo } from 'redux-form-submit-saga/es/immutable' import { applyMiddleware, createStore, compose } from 'redux' import { autoRehydrate, persistStore } from 'redux-persist-immutable' import { browserHistory } from 'react-router' import { combineReducers } from 'redux-immutable' import { fromJS } from 'immutable' import { routerMiddleware } from 'react-router-redux' import createSagaMiddleware from 'redux-saga'  import rootReducer from './rootReducer' import sagas from './rootSaga'  export default function configureStore() {   return new Promise((resolve, reject) => {     try {       const sagaMiddleware = createSagaMiddleware()       const middleware = [ routerMiddleware(browserHistory), sagaMiddleware ]        const enhancer = compose(         autoRehydrate(),         applyMiddleware(...middleware)       )       const store = createStore(         combineReducers(rootReducer),         undefined,         enhancer       )        // Decorate with Redux Form Submit Saga       // and create hook for saga's       const rootSaga = addFormSubmitSagaTo(sagas)       sagaMiddleware.run(rootSaga)        // Persist store to the local storage       persistStore(         store,         { whitelist: ['auth', 'timezone'] },         () => resolve(store)       )     } catch (e) {       reject(e)     }   }) } 

Here's my .eslintrc:

{   "env": {     "browser": true,     "jest/globals": true   },   "extends": [     "standard",     "standard-flow",     "plugin:react/recommended"   ],   "plugins": [     "compat",     "jest",     "react"   ],   "parserOptions": {     "ecmaVersion": 2017,     "sourceType": "module",     "ecmaFeatures": {       "jsx": true     }   },   "rules": {     "comma-dangle": ["warn", "only-multiline"],     "compat/compat": 2,     "jest/no-disabled-tests": "warn",     "jest/no-focused-tests": "error",     "jest/no-identical-title": "error",     "max-len": ["warn", 80],     "no-debugger": 0,     "react/jsx-uses-vars": [2]   } } 

Here's my .babelrc:

{   "plugins": [     "react-hot-loader/babel",     "syntax-flow",     "tcomb",     "transform-class-properties"   ],   "presets": [     "es2015",     "react",     ["env", {       "targets": {         "browsers": ["last 2 versions"]       }     }]   ] } 

But whatever I do: I keep getting the following error:

Module build failed: TypeError: Cannot read property 'range' of null     at TokenStore.getTokenBefore (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/token-store/index.js:318:17)     at EventEmitter.checkFunction (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/rules/generator-star-spacing.js:131:42)     at emitOne (events.js:101:20)     at EventEmitter.emit (events.js:191:7)     at NodeEventGenerator.enterNode (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/util/node-event-generator.js:39:22)     at CodePathAnalyzer.enterNode (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js:607:23)     at CommentEventGenerator.enterNode (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/util/comment-event-generator.js:98:23)     at Controller.enter (/Users/danielterwiel/dev/nimbus/node_modules/eslint/lib/eslint.js:928:36)     at Controller.__execute (/Users/danielterwiel/dev/nimbus/node_modules/estraverse/estraverse.js:397:31)     at Controller.traverse (/Users/danielterwiel/dev/nimbus/node_modules/estraverse/estraverse.js:501:28)  @ multi react-hot-loader/patch webpack-hot-middleware/client babel-polyfill ./src/index.js ./src/style/main.css 

I'm not entirely sure what to do. I came accross multiple posts with similar problems, but none of these have lead to an answer until now.

回答1:

Prior to ESLint supporting ES2017 async/await natively, babel-eslint included workarounds that were removed in babel-eslint@7.0.0. You should either upgrade babel-eslint to v7 or, if you can't do that, use eslint-plugin-babel's patched generator-star-spacing rule.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!