2016-05-12 69 views
5

我把一个反应项目一起使用webpack和LESS进行造型。我使用的是组件式结构,像这样:如何使用webpack less-loader从特定路径导入LESS文件?

/root 
    /src 
     /components 
      /MyComponent 
       -index.js 
       -index.less 
     /styles 
      -colors.less 

我想每个组件引用它通过导入自己的风格:

//MyComponent.js 

import React from 'react'; 
import styles from './index.less'; 

... 
<div className={styles.someclass} > 
... 

在index.less我要导入的共同共享样式。喜欢的东西:

//index.less 

@import "styles/colors.js"; 

.someclass { 
    background: @themecolor; 
} 

这里是我怎么也设置为webpack.config文件少:

 resolve: { 
    alias: { 
     components: path.resolve(__dirname, 'src', 'components'), 
     reducers:  path.resolve(__dirname, 'src', 'reducers'), 
     actions:  path.resolve(__dirname, 'src', 'actions'), 
     styles:  path.resolve(__dirname, 'src', 'styles'), 
     images:  path.resolve(__dirname, 'src', 'images'), 
     pages:  path.resolve(__dirname, 'src', 'pages'), 
     lib:   path.resolve(__dirname, 'src', 'lib'), 
     utils:  path.resolve(__dirname, 'src', 'utils'), 
     examples:  path.resolve(__dirname, 'src', 'examples') 
    }, 
    extensions: ['', '.js','.jsx', '.css', 'png', 'less'] 
    }, 

module: { 
    loaders: [ 
     { test: /\.jsx$/, 
      loader: 'babel', 
      include: path.join(__dirname, 'src') 
     }, 
     { test: /\.js$/, 
      loader: 'babel', 
      exclude: /node_modules/ 

     }, 
     { 
      test: /\.css$/, 
      loader: "css-loader!autoprefixer-loader" 
     }, 
     { 
      test: /\.less$/, 
      loader: "style!css!autoprefixer!less" 
     }, 
     { test: /\.png$/, 
      loader: "url-loader?limit=10000&minetype=image/jpg" 
     } 
    ] 
}, 

... 

正如你可以看到我广泛使用的WebPack的别名决心功能,所以我不不必担心各地的相对路径。

问题是我无法获得导入的样式。我曾尝试基于谷歌搜索,包括所有可能的方法:

@import "~styles/colors.less"; //not sure what the ~ does? 
@import "/styles/colors.less"; 
@import "styles/colors.less"; 
@import "../../styles/colors.less"; 

无论它编译但款式不显示,还是我得到一个错误,该文件不能被解决。

有没有办法让webpack使用别名来解决这些问题呢?我真的不想在这里找出相对路径,如果我能避免它,因为我的嵌套会变得很深。如果需要,我会尽快完成工作。

我该怎么做?

回答

相关问题