如何在Javascript中阅读Less变量?

Kim*_*Kim 9 javascript less reactjs webpack-2

如何在javascript中读取较少的变量,如less-vars-to-js

我正在研究一个React项目(webpack2,less等),但不是SSR(节点环境),所以我不能使用fsnode-glob模块.

有些人建议我自己写一个webpack加载器:(我真的不熟悉...而且我已经使用了较少的加载器......

JavaScript的

import lessToJs from 'less-vars-to-js';
import styles from './style.less';

const jsStyle = lessToJs(styles); => Uncaught TypeError: sheet.match is not a function

const mycomponent = (
  <MyComponent
    className={styles.nav}
    tintColor={jsStyle['@tint-color']}
  />
);
Run Code Online (Sandbox Code Playgroud)

@import "../../../themes/theme.web.less";

@tint-color: grey;

.nav {
  background-color: @tint-color;
}
Run Code Online (Sandbox Code Playgroud)

的WebPack

config.module.rules.push({
  test: /\.less$/,
  exclude: /node_modules/,
  use: [
    { loader: 'style-loader' },
    {
      loader: 'css-loader',
      options: {
        modules: true,
        importLoaders: 1,
      },
    },
    { loader: 'postcss-loader' },
    { loader: 'less-loader' },
  ],
});
Run Code Online (Sandbox Code Playgroud)

Yur*_*nko 5

正如我在评论中提到的那样,您可以实现自定义加载程序。像这样(未经测试)

//utils/less-var-loader.js
const lessToJs = require('less-vars-to-js')

module.exports = function(content) {
  return `module.exports = ${JSON.stringify(lessToJs(content))}`
}
Run Code Online (Sandbox Code Playgroud)

然后

import * as styles from '!!./utils/less-var-loader!./style.less'
Run Code Online (Sandbox Code Playgroud)

双击!!可忽略预配置的加载程序。