Fla*_*akx 5 reactjs css-modules react-css-modules
我有一个react组件,它有一个X选项,可以导入要使用CSS模块的样式表.
理想情况下,我希望通过使用eg获取一个全局环境变量
process.env.THEME
我不能用:
import MyStyleSheet from `${process.env.THEME}/my.module.css`
Run Code Online (Sandbox Code Playgroud)
我可以用:
const MyStyleSheet = require(process.env.THEME/my.module.css);
Run Code Online (Sandbox Code Playgroud)
然而.....
import/no-dynamic-requireeslint规则开始说它的坏.
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;
Run Code Online (Sandbox Code Playgroud)
例如,作为安装组件时的解决方法,您可以尝试检查环境变量,然后需要特定的 css 文件,如下所示:
class App extends Component {
componentWillMount() {
if(process.env.CUSTOM_ENV_VAR === 'test') {
require('styles1.css');
} else {
require('styles2.css');
}
}
}
Run Code Online (Sandbox Code Playgroud)
将其解析为承诺应该可以通过 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(() => {
//...
});
Run Code Online (Sandbox Code Playgroud)
参考部分:ES6 模块加载器