Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create-React-App failed to compile | Import/First Error

I'm currently using Create-React-App for my personal site. I keep getting the following errors every time I run it:

./src/~/react-router-dom/es/index.js
 Line 3:   Import in body of module; reorder to top  import/first
 Line 5:   Import in body of module; reorder to top  import/first
 Line 7:   Import in body of module; reorder to top  import/first
 Line 9:   Import in body of module; reorder to top  import/first
 Line 11:  Import in body of module; reorder to top  import/first
 Line 13:  Import in body of module; reorder to top  import/first
 Line 15:  Import in body of module; reorder to top  import/first
 Line 17:  Import in body of module; reorder to top  import/first
 Line 19:  Import in body of module; reorder to top  import/first
 Line 21:  Import in body of module; reorder to top  import/first
 Line 23:  Import in body of module; reorder to top  import/first
 Line 25:  Import in body of module; reorder to top  import/first

I definitely feel like I'm missing something super small but I'm having trouble figuring it out. I tried Googling the error keyword 'import/first' and it's leading me to think it's an ESLint issue. Please let me know if you see any problem in my import order. I've tried different import orders, but nothing seems to get rid of the error.

import React from 'react';
import ReactDOM from 'react-dom';
import { createBrowserHistory } from 'history';
import { Router, Route, Redirect, Switch } from 'react-router-dom';
import './index.css'; 
import App from './App.js';
import Home from './home.js';
import About from './about.js';
import Contact from './contact.js';
import NotFound from './404.js';

import registerServiceWorker from './registerServiceWorker';

const history = createBrowserHistory();

ReactDOM.render(
    <Router history={history}>
        <App>
            <Switch>
                <Route exact path="/" component= {Home} />
                <Route path="/about" component= {About} />
                <Route path="/contact" component= {Contact} />
                <Route path="/404" component= {NotFound} />
                <Redirect to= "/404" />
            </Switch>
        </App>
    </Router>,
    document.getElementById('root')
);
registerServiceWorker();
like image 902
Catherine Monroe Avatar asked Aug 09 '17 21:08

Catherine Monroe


2 Answers

If you're here because you were using React.lazy to lazy load a component, you must specify all your import statements before any React.lazy() lines. Another way of saying this is, you cannot have any import statements after your lazy loaded components.

See example for order

import Footer from "./components/Footer.js";
const Header = React.lazy(() => import("components/Header"));
like image 191
Collin Thomas Avatar answered Oct 15 '22 22:10

Collin Thomas


For me, it was a case, because I was violating Eslint import/first rule, by calling an imported function before any other import.

For example, this code had a problem:

import configureStore from './redux/common/configureStore';
const store = configureStore();

// Add polyfill for fetch for older browsers
import 'isomorphic-fetch';
require('es6-promise').polyfill();

because I was calling and assigning const store = configureStore(); before import 'isomorphic-fetch';

like image 37
Shota Avatar answered Oct 15 '22 22:10

Shota