基于环境变量的条件导入

时间:2018-06-04 21:19:55

标签: reactjs css-modules react-css-modules

我有一个react组件,它有一个X选项,可以导入要使用CSS模块的样式表。

理想情况下,我想通过使用例如

来获取全局环境变量

process.env.THEME

我无法使用:

import MyStyleSheet from `${process.env.THEME}/my.module.css`

我可以使用:

const MyStyleSheet = require(process.env.THEME/my.module.css);

然而.....

import/no-dynamic-require eslint规则开始说它不好。 https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md

我读过的所有文章和帖子都说不可能。 当然这是一个普通的想法,但我不能为我的生活找到如何做到这一点。有什么想法吗?

更新

import React from 'react';

const Classes = import('./${process.env.theme}/Button.module.css');

const Button = () => (
  <button className={Classes.button}>My Themed Button</button>
);

export default Button;

1 个答案:

答案 0 :(得分:2)

例如,作为组件安装时的变通方法,您可以尝试检查env变量,然后需要特定的css文件,如下所示:

class App extends Component {
    componentWillMount() {
         if(process.env.CUSTOM_ENV_VAR === 'test') {
            require('styles1.css');
         } else {
            require('styles2.css');
         }
    }
}

将其作为承诺解决应该使用css模块:

if (process.env.CUSTOM_ENV_VAR === 'theme1') {
    import('./theme1.css').then(() => {
        // ...
    });
else (process.env.CUSTOM_ENV_VAR === 'theme2') {
    import('./theme2.css').then(() => {
        //...
    });
}

import(`./${process.env.CUSTOM_ENV_VAR}.css`).then(() => {
    //...
});

reference-part:ES6 Module Loader