0

In Python I can locally import the headers on the fly. Right now I am working on the Reactjs and localStorage which is normally run on client. Now it has running in the server side. The problem has been address here But I am accidentally commit the mock class to source code. So I started to use process.env in order to do local import like Python

package.json

{
  ...,
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

I know how to use process.env from this. But I still can not get out from the issue. I got 'import' and 'export' may only appear at the top level

export const getAuthToken = () => {
  if (process.env === 'development'){
    import localStorage from './localStorageMock';
  }
  return localStorage.getItem('authToken');
};

Question:
How to do locally import like Python in Javascript? If not how can I solve this issue?

Attempt1:
localStorageMock2.js. I try another syntax.

function LocalStorageMock(){
  this.store = {};

  this.getItem = function(key){
    return this.store[key] || null
  };
  this.setItem = function(key, value) {
    this.store[key] = value
  };

  this.removeItem = function(key) {
    delete this.store[key]
  };

}

const localStorageMock = new LocalStorageMock(); export default localStorageMock;

Trackback1:
When I look at the cache object console.log(cache);

{ default:
  LocalStorageMock {
  store: {},
  getItem: [Function],
  setItem: [Function],
  removeItem: [Function] } }

I think I see removeItem function. But no luck. console.log(typeof cache.removeItem);

undefined

Then like I expected. It raises the exception. return cache.removeItem('authToken');

console.error node_modules/redux-saga/lib/internal/utils.js:240
      uncaught at askBackend TypeError: cache.removeItem is not a function
          at Object.<anonymous>.exports.removeAuthToken (/Users/sarit/study/HT6MInterface/f1/src/utils.js:50:16)
          at Object.<anonymous>.exports.VerifyTokenReducer (/Users/sarit/study/HT6MInterface/f1/src/containers/reducers.js:20:34)
joe
  • 8,383
  • 13
  • 61
  • 109

1 Answers1

0

Thank you very much to him. He always support newbie through gitter channel. Here is the complete solution to my problem.

export const myCache = () => {
  //Fix the test when runner is on serverside

  const tmp = Object.assign({}, process.argv);
  const cache = (tmp[4] === '--env=jsdom') ? require("./localStorageMock2") : localStorage;
  if (tmp[4] === '--env=jsdom') {
    const cache = require("./localStorageMock2");
    return cache.default;
  } else {
    return localStorage;
  }
};

I was totally forgot require syntax. Since I am practicing pure ES6.

joe
  • 8,383
  • 13
  • 61
  • 109