【问题标题】:Dynamic imports in ReactReact 中的动态导入
【发布时间】:2017-08-18 00:37:50
【问题描述】:

我正在尝试通过 process.env.NODE_ENV 导入文件的动态,以在生产或开发中导入样式表或另一个样式表。我已经设定了加载它的条件,但它给了我一个错误 Error in ./src/index.js 语法错误:'import' 和 'export' 可能只出现在顶层 (13:4) 我猜这是不正确的,但是......我该怎么做?我使用 create-react-app

import 'babel-polyfill';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';

import App from './components/App';

import routes from './routes';
import configureStore from './store/configureStore';
import initialState from './reducers/initialState';

if (process.env.NODE_ENV === 'production') {
    import './styles/index.css';
}else {
    import './styles/index.scss';
}
const store = configureStore(initialState);

ReactDOM.render(
   <Provider store={store}>
       <App />
   </Provider>,
   document.getElementById('root') 
);

谢谢!!!

【问题讨论】:

  • 使用require('./styles/index.scss')? :) 但也许这更多应该由您的构建/CI 而不是代码决定?
  • 另一种方法是 import './styles'; 然后将扩展处理从 .css 更改为 .scss 用于生产与开发,或者为其设置别名并根据环境更改别名。我个人尽量避免在应用程序代码中进行这样的分支,因为这表明这是构建逻辑的问题,而不是应用程序逻辑的问题。在同一个文件中使用requireimport 从长远来看是行不通的。

标签: reactjs ecmascript-6


【解决方案1】:

正如老金在 cmets 中提到的,在这种情况下,您需要使用 require

例如,下面是我如何根据NODE_ENV 配置对 Redux 存储的访问权限,可以根据您的需要进行调整:

const INITIAL_STATE = {};

function getStore () {
    const configureStore = process.env.NODE_ENV === 'production'
        ? require('./configure-store.prod').default
        : require('./configure-store.dev').default;
    return configureStore(INITIAL_STATE);
}

export default getStore();

【讨论】:

  • 保存我完整的一天!太感谢了!使用create-react-app,您可以通过import FakeData_MoviesComingSoon from '../data/coming-soon.json'; 导入文件,您将永远无法将 production / !==production 和(因为你! ;-) ) FakeData: process.env.NODE_ENV !== 'production' ? require('../data/coming-soon.json') : '' 允许我仅在开发时导入大数据文件。发送!发送!发送!发送!只需将我构建的应用程序从 750k 减少到 131k !
猜你喜欢
  • 2016-08-09
  • 1970-01-01
  • 2017-04-12
  • 2021-06-03
  • 2020-04-27
  • 2021-04-20
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多